업캐스팅
파생 클래스의 객체를 기본 클래스의 포인터로 가리키는것
업 캐스팅의 경우 기본 클래스의 멤버에만 접근할 수 있다.
다운캐스팅
기본 클래스의 포인터가 가리키는 객체를 파생 클래스의 포인터로 가리키는것
상속의 생성자와 소멸자
파생 클래스의 객체 생성시 생성자의 실행
기본 클래스 생성자 실행 -> 파생 클래스 생성자 실행
파생 클래스 객체 소멸
파생 클래스 소멸자 -> 기본 클래스 소멸자
파생 클래스 에서 기본 클래스 생성자 호출
개발자는 파생 클래스의 생성자와 함께 실행할 기본 클래스의 생성자를 지정하여야 한다.
but 기본 클래스의 생성자를 명시적으로 지정하지 않으면, 컴파일러에 의해 묵시적으로 기본 클래스의 기본 생성자를 실행 시킨다.
명시적 기본 클래스 선택
#include <iostream>
#include <string>
using namespace std;
class TV {
int size;
public:
TV() { size = 20; }
TV(int size) { this->size = size; }
int getSize() { return size; }
};
class WideTV :public TV {
bool videoIn;
public:
WideTV(int size, bool videoIn) :TV(size) { // 명시적으로 기본 클래스의 생성자 지정
this->videoIn = videoIn;
}
bool getvideoIn() { return videoIn; }
};
class SmartTV : public WideTV {
string ipAddr;
public:
SmartTV(string ipAddr, int size) :WideTV(size, true) { // 명시적으로 WideTV(int size, bool videoIn) :TV(size) 생성자를 지정하고 있다.
this->ipAddr = ipAddr;
}
string getIpAddr() { return ipAddr; }
};
int main() {
SmartTV htv("192.0.0.0.1", 32);
cout << "size =" << htv.getSize() << endl;
cout << "videoIn = " << boolalpha << htv.getvideoIn() << endl;
cout << "IP = " << htv.getIpAddr() << endl;
}
상속의 종류 : public, protected , private
public 상속
public 으로 상속받으면, 기본 클래스의 protected, public 멤버들은 접근 지정 변경 없이 파생 클래스에 그대로 상속확장된다.
protected 상속
기본 클래스를 protected로 상속바드면, 기본 클래스의 protected ,public 멤버들은 모두 protected 접근 지정으로 변경되어 파생 클래스에 상속 확장 된다.
private 상속
기본 클래스를 private로 상속 받으면, 기본 클래스의 protected, public 멤버들은 모두 private 접근 지정으로 변경되면 파생 클래스에 상속 확장된다.
-> 접근 지정자를 생략하면 자동으로 private 상속으로 처리된다.
class 내에서 protected는 private와 같은 역할을 한다. protected는 상속할 때 필요!
다중상속: 여러가지 클래스를 상속한다
class MusicPhone :public MP3, public MobilePhone{ // , 로 나열하면 된다.
public:
void dial();
}
'c++' 카테고리의 다른 글
명품 c++ 7장 연습문제 8번, 9번 (0) | 2020.05.05 |
---|---|
명품 c++ 프로그래밍 6장 연습문제 9번 (0) | 2020.04.28 |
명품 c++ 프로그래밍 6장 연습문제 7번 (0) | 2020.04.27 |
명품 C++ 연습문제 3장 5번 (0) | 2020.04.27 |
c++ 매개변수로 const 를 쓰는 이유 (0) | 2020.04.21 |