class 파생클래스명: 접근제어지시자 부모클래스명
// 기본 클래스 혹은 부모 클래스
class CMyData {
};
// 파생 클래스 혹은 자식 클래스
class CMyDataEx: public CMyData {
};
파생 클래스의 인스턴스가 생성될 때 기본 클래스의 생성자도 호출된다.
파생 클래스는 기본 클래스의 멤버에 접근할 수 있다. (private
제외)
파생 클래스의 인스턴스를 통해 기본 클래스 메서드를 호출할 수 있다.
상속 관계에서 파생 클래스의 생성자는 먼저 호출되지만 실행은 나중에 된다.
private
으로 선언된 멤버는 파생 클래스에서 접근이 불가능하다.protected
으로 선언된 멤버는 파생 클래스에서만 접근이 가능하며, 외부에서는 접근이 불가능하다.b.CMyData::SetData(15)
)을 통해 직접 상위 기본 클래스의 메서드를 호출할 수 있다.int main(int argc, char* argv[]) {
CMyDataEx a;
CMyData &rData = a; // 참조자를 이용한 참조
CMyData *pData = new CMyDataEx; // 포인터를 이용한 참조
rData.SetData(15);
pData->SetData(11);
cout << rData.GetData() << endl;
delete pData;
return 0;
}
CMyDataEx::SetData
가 아닌 CMyData::SetData
가 호출된다.pData
를 delete
하더라도 CMyDataEx
의 소멸자가 호출되지 않으므로, 메모리 누수 문제가 발생한다.A, B, C
에 대하여 A
는 B
의 기본이고 B
는 C
의 기본 클래스인 상속 관계라 하자.C
클래스의 인스턴스를 선언하면 생성자의 호출 순서는 C, B, A
이다.A, B, C
이다.C
클래스의 인스턴스가 소멸하면 소멸자가 A, B, C
순서대로 호출 및 실행된다.class CMyDataEx: public CMyData {
public:
using CMyData::CMyData;
}