상속
상속(Inheritance)
C++에서의 상속이란?
상속의 목적 및 장점
상속 선언
Class Student : public Person
Student 클래스는 Person 클래스의 멤버를 물려받음
업 캐스팅(up-casting)
파생 클래스 포인터가 기본 클래스 포인터에 치환되는 것
Person* pBase = pDer; : 업 캐스팅
이 경우 pBase는 파생 클래스의 멤버를 이용할 수 없음
다운 캐스팅(down-casting)
기본 클래스의 포인터가 파생 클래스의 포인터에 치환되는 것
pDer = (Student *)pBase; : 다운 캐스팅
상속 관계에서의 생성자
파생 클래스의 객체가 생성될 때
기본 클래스 생성자 -> 파생 클래스 생성자
컴파일러가 파생 클래스에서 묵시적으로 기본 클래스의 기본 생성자를 호출하도록 함
기본 클래스의 기본 생성자가 존재하지 않는다면 오류가 발생할 수 있음
Class B : public A {
public :
B(int x) : A(x + 3)
}
위와 같이 명시적으로 생성자 선택 가능
상속 관계에서의 소멸자
파생 클래스의 객체가 소멸될 때
파생 클래스 소멸자 -> 기본 클래스 소멸자
상속 지정
◼ 상속 선언 시 public, private, protected의 3가지 중 하나 지정
◼ 기본 클래스의 멤버의 접근 속성을 어떻게 계승할지 지정
◼ public – 기본 클래스의 protected, public 멤버 속성을 그대로 계승
◼ private – 기본 클래스의 protected, public 멤버를 private으로 계승
◼ protected – 기본 클래스의 protected, public 멤버를 protected로 계승
다중 상속
class MusicPhone : public MP3, public MobilePhone
상속받으려는 클래스를 나열하는 방식으로 다중 상속이 가능
X를 상속받은 클래스 A, B를 Y에게 다중 상속한다면, X의 멤버가 중복 상속되는 문제가 발생
가상 상속
다중 상속으로 인한 중복 상속 문제 해결
파생 클래스의 선언문에서 기본 클래스 앞에 virtual을 붙여 가상 상속 선언
파생 클래스의 객체가 생성될 때 기본 클래스의 멤버를 한 번만 생성