728x90
[클래스 상속] : inheritance
: 클래스 상속은 이미 정의되어있는 부모 클래스의 멤버 변수, 멤버 함수들을 물려 받아서
상속받은 자식 클래스에서eh 그대로 사용 가능하도록 만들어진 기능이다.
-자식 클래스에서는
부모 클래스 속 public, protected로 선언된 멤버들을 사용O
private 로 선언된 멤버는 사용 X
class 자식클래스이름 : public 부모클래스이름 {
private:
//멤버변수 선언
public:
//멤버함수 선언
};
[상속, 생성자]
-기본적으로 (부모 생성자 -> 자식 생성자 -> 자식 소멸자 -> 부모 소멸자) 순으로 호출된다.
-특별히 부모 생성자 지정X
-> 부모의 기본생성자가 가장 먼저 자동 호출된다.
-특별히 부모 생성자 지정O
-> 자식 생성자 헤더 뒤에 : 콜론 추가 후 원하는 부모 클래스 생성자 적으면 된다.
자식생성자() : 부모생성자(x, y ... ) {
}
//10주차 - 클래스 상속
#include <iostream>
#include <string>
using namespace std;
class Television { //부모클래스
private:
int inch; //화면 크기
int channel; //채널 번호
int volume; //소리 크기
public:
//생성자 -(1) : 매개변수 없는 생성자
Television() {
inch = 50;
channel = 10;
volume = 0;
}
//생성자 -(2) : 매개변수 있는 생성자
Television(int pInch, int pChannel, int pVolume) {
inch = pInch;
channel = pChannel;
pVolume = pVolume;
}
//소멸자
~Television() {
}
//Get, Set()
int GetInch() {
return inch;
}
void SetInch(int pInch) {
inch = pInch;
}
int GetChannel() {
return channel;
}
void SetChannel(int pChannel) {
channel = pChannel;
}
int GetVolume() {
return volume;
}
void SetVolume(int pVolume) {
volume = pVolume;
}
};
class OLEDTV : public Television { //자식 클래스
private:
//기본적으로 부모의 멤버도 다 갖고 있고/ 자식클래스에 추가로 필요한 멤버들 선언
int USB; //usp 포트 개수
bool HDMI;
bool DigitalCamera;
public:
OLEDTV() : Television() { //생성자 - (1) _ 부모의 기본생성자를 지정 자식 생성자 선언
USB = 5;
HDMI = true;
DigitalCamera = false;
}
OLEDTV(int pInch, int pChannel, int pVolume, int pUSB, bool pHDMI, bool pDigitalCamera)
: Television(pInch, pChannel, pVolume){
//생성자 - (2) _부모의 생성자 지정하여 자식 생성자 선언
USB = pUSB;
HDMI = pHDMI;
DigitalCamera = pDigitalCamera;
}
//소멸자
~OLEDTV() {
}
//Get, set()
int GetUSB() {
return USB;
}
void SetUSB(int pUSB) {
USB = pUSB;
}
bool GetHDMI() {
return HDMI;
}
void SetHDMI(bool pHDMI) {
HDMI = pHDMI;
}
bool GetDigitalCamera() {
return DigitalCamera;
}
void SetDigitalCamera(bool pDigitalCamera) {
DigitalCamera = pDigitalCamera;
}
};
int main() {
//부모클래스 객체 생성
Television SStv;
Television LGtv(30, 20, 10);
//자식클래스 객체 생성
OLEDTV SKtv;
OLEDTV LStv(50, 40, 30, 4, false, false);
bool result;
cout << "SStv " << endl;
cout << "Inch = " << SStv.GetInch()
<< ", Channel = " << SStv.GetChannel()
<< ", Volume = " << SStv.GetVolume() << endl;
cout << endl;
cout << "LGtv " << endl;
cout << "Inch = " << LGtv.GetInch()
<< ", Channel = " << LGtv.GetChannel()
<< ", Volume = " << LGtv.GetVolume() << endl;
//자식 객체 출력
cout << endl;
cout << "SKtv " << endl;
cout << "Inch = " << SKtv.GetInch()
<< ", Channel = " << SKtv.GetChannel()
<< ", Volume = " << SKtv.GetVolume()
<< ", USB = " << SKtv.GetUSB() << endl;
if (SKtv.GetHDMI() == true) cout << "HDMI 존재" << endl<<endl;
if (SKtv.GetHDMI() == false) cout << "HDMI 없음 " << endl<<endl;
if (SKtv.GetDigitalCamera() == true) cout << "캠 존재 " << endl<< endl;
if (SKtv.GetDigitalCamera() == false) cout << "캠 없음" << endl<<endl;
getchar();
getchar();
return 0;
}
[함수 오버라이딩(재정의)]
-자식 클래스에서는 상속받은 부모의 멤버함수들을 자신의 필요에 맞춰 변경(재정의)할 수 있다.
-자식클래스에는 재정의된 함수를 우선 호출한다.
#include <iostream>
#include <string>
using namespace std;
class Television { //부모클래스
private:
int inch; //화면 크기
int channel; //채널 번호
int volume; //소리 크기
public:
//생성자 -(1) : 매개변수 없는 생성자
Television() {
inch = 50;
channel = 10;
volume = 0;
}
//생성자 -(2) : 매개변수 있는 생성자
Television(int pInch, int pChannel, int pVolume) {
inch = pInch;
channel = pChannel;
pVolume = pVolume;
}
//소멸자
~Television() {
}
//Get, Set()
int GetInch() {
return inch;
}
void SetInch(int pInch) {
inch = pInch;
}
int GetChannel() {
return channel;
}
void SetChannel(int pChannel) {
channel = pChannel;
}
int GetVolume() {
return volume;
}
void SetVolume(int pVolume) {
volume = pVolume;
}
//일반멤버함수
void F_PrintClassName() {
cout << "Class name = Television" << endl;
}
};
class OLEDTV : public Television { //자식 클래스
private:
//기본적으로 부모의 멤버도 다 갖고 있고/ 자식클래스에 추가로 필요한 멤버들 선언
int USB; //usp 포트 개수
bool HDMI;
bool DigitalCamera;
public:
OLEDTV() : Television() { //생성자 - (1) _ 부모의 기본생성자를 지정 자식 생성자 선언
USB = 5;
HDMI = true;
DigitalCamera = false;
}
OLEDTV(int pInch, int pChannel, int pVolume, int pUSB, bool pHDMI, bool pDigitalCamera)
: Television(pInch, pChannel, pVolume){
//생성자 - (2) _부모의 생성자 지정하여 자식 생성자 선언
USB = pUSB;
HDMI = pHDMI;
DigitalCamera = pDigitalCamera;
}
//소멸자
~OLEDTV() {
}
//Get, set()
int GetUSB() {
return USB;
}
void SetUSB(int pUSB) {
USB = pUSB;
}
bool GetHDMI() {
return HDMI;
}
void SetHDMI(bool pHDMI) {
HDMI = pHDMI;
}
bool GetDigitalCamera() {
return DigitalCamera;
}
void SetDigitalCamera(bool pDigitalCamera) {
DigitalCamera = pDigitalCamera;
}
//부모 멤버 함수 재정의(내용만 바뀜) 재정의하여 사용
//-> 이 경우 부모의 함수말고 자식이 재정의한 함수 내용만 출력됨
//@OverRide
void F_PrintClassName() {
cout << "Class name = OLEDTV" << endl;
}
};
int main() {
//부모클래스 객체 생성
Television SStv;
Television LGtv(30, 20, 10);
//자식클래스 객체 생성
OLEDTV SKtv;
OLEDTV LStv(50, 40, 30, 4, false, false);
cout << "SStv "; //부모
SStv.F_PrintClassName();
cout << "LGtv";//부모
LGtv.F_PrintClassName();
cout << "SKtv";//자식객체
SKtv.F_PrintClassName(); //재정의한 함수의 내용이 출력된다.
getchar();
getchar();
return 0;
}
728x90
'C++, C언어 > [문법]_C++' 카테고리의 다른 글
C++_12주차_정리 (0) | 2021.12.20 |
---|---|
C++_11주차_정리 (0) | 2021.12.20 |
C++_9주차_정리 (0) | 2021.12.20 |
C++_8주차_정리 (0) | 2021.12.20 |
C++_7주차_정리 (0) | 2021.12.20 |