본문 바로가기
[ C++ ]/- C++ 문법정리

C++ 18 [상속, 다중상속, 가상상속]

by MRG 2023. 4. 19.
728x90
반응형

▣ 상속 : 부모클래스(기본클래스), 자식 클래스(파생클래스)에 관계를 의미

 

▣ 클래스 간에 상속을 하는 이유 : 클래스 재활용 및 생산성, 관리에 용이하기 때문

 

▣ 상속 방법 : 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 키워드를 앞에 붙이면 된다.

728x90
반응형

'[ 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

댓글