▣ 상속 : 부모클래스(기본클래스), 자식 클래스(파생클래스)에 관계를 의미
▣ 클래스 간에 상속을 하는 이유 : 클래스 재활용 및 생산성, 관리에 용이하기 때문
▣ 상속 방법 : class 자식클래스명 : public 부모클래스명 { };
▣ 부모클래스에 public, private, protected 모두 사용 가능
▣ 상속 횟수는 제한이 없고 상속받은 자식클래스는 부모의 모든 멤버를 접근 가능
▣ protected 접근지정자는 상속받은 클래스는 접근이 가능
▣ 자식클래스가 부모클래스를 상속할 때에도 생성자, 소멸자 모두 실행
▣ 자식클래스를 객체로 사용할 때
부모클래스 생성자 호출 -> 자식클래스 생성자 호출 -> 자식클래스 소멸자 호출 -> 부모클래스 소멸자 호출,
이런 순으로 실행
▣ 이러한 생성자의 호출 관계는 컴파일러의 의해 호출
▣ 자식클래스 생성자를 이용해서 부모클래스의 임의로 만든 생성자(매개변수가 존재)를 호출할 수 있다.
▣ Soldier::Soldier() : Player(10) : 이런 식으로 코딩을 진행하면 Soldier생성자를 호출하기 전에 매개변수가 있는
Player 부모클래스 생성자를 먼저 호출한다.
▣ 다중상속 : 하나의 자식클래스를 여러 클래스를 상속받는 걸 의미
▣ 다중상속 방법 : class Person : public Soldier, public Medic, 콤마(,)로 구분
▣ Soldier클래스, Medic클래스 모두 다 부모클래스 Player를 상속받았기 때문에 다중상속한 Person에서 부모클래스를 접근하려면 두 객체에 hp를 접근하게 된다 그럼 컴파일 오류가 발행한다.
다시 말해 중복 상속이 되기 때문에 오류 발생
▣ 위에 있는 오류를 해결하기 위해서는 가상상속을 진행해야 한다.
▣ 가상상속(virtual) : 자식클래스의 객체가 생성될 때 부모클래스의 멤버 공간(메모리)를 한 번만 할당한다.
이미 할당되었다면 그 공간을 같이 공유해서 사용하게 한다.
▣ 가상상속방법 : virtual public Player처럼 virtual 키워드를 앞에 붙이면 된다.
'[ C++ ] > - C++ 문법정리' 카테고리의 다른 글
C++ 20 [추상클래스, 순수가상함수] (0) | 2023.04.20 |
---|---|
C++ 19 [가상함수, 오버라이딩] (0) | 2023.04.20 |
C++ 17 [연산자 오버로딩] (0) | 2023.04.14 |
C++ 16 [객체 반환] (0) | 2023.04.13 |
C++ 15 [friend 함수, 클래스] (0) | 2023.04.13 |
댓글