다중 상속
Child 클래스는 2개 이상의 parent 클래스로부터 상속받을 수 있다. 이를 다중 상속이라고 하며, 사용방법은 2가지가 있다. 아래 예제에서 자세한 사용 방법을 참고할 수 있다.
예제 1
#include <iostream>
using namespace std;
class P1 { //부모 클래스
private:
char* name;
public:
P1(char* n) { //생성자
name = n;
}
char* output() {
return name;
}
};
class C1 : public P1 { //P1의 자식 클래스
private:
int age;
public:
C1(char* n, int a) : P1(n) { //생성자, P1에 인수 n 전달
age = a;
}
int output_1() {
return age;
}
};
class C2 : public C1 { //C1의 자식 클래스
private:
int height;
public:
C2(char* n, int a, int h) : C1(n, a) { //생성자, C1에 n, a 전달
height = h;
}
int output_2() {
return height;
}
void output_all() {
cout << output() << " " << output_1() << " " << output_2() << endl;
}
};
int main()
{
C2 ob((char*)"Hong", 6, 125);
ob.output_all();
cout << ob.output() << " " << ob.output_1() << " " << ob.output_2() << endl;
return 0;
}
실행 결과
Hong 6 125
Hong 6 125
- Child 클래스 C형의 객체 OB가 생성될 때 생성자 함수는 P1→C1 →C2 순서로 호출되어 실행된다.
- 접근 지정자가 public이면 Parent 클래스의 public 멤버는 파생 클래스에서도 public 멤버로 상속된다. P1의 OUTPUT()은 C1의 public 멤버로 상속되고, C1의 public 멤버 output_1()와 output()은 C2의 public 멤버로 상속된다.
예제 2
#include <iostream>
using namespace std;
class P1 {
private:
char* name;
public:
P1(char* n) {
cout << "P1의 생성자 실행" << endl; name = n;
}
char* output_1() {
return name;
}
};
class P2 {
private:
int age;
public:
P2(int a) {
cout << "P2의 생성자 실행" << endl; age = a;
}
int output_2() {
return age;
}
};
class C : public P1, public P2 {
private:
int height;
public:
C(char* n, int a, int h) : P1(n), P2(a) {
cout << "C의 생성자 실행" << endl; height = h;
}
int output_3() { return height; }
void output_all() {
cout << output_1() << " " << output_2() << " " << output_3() << endl;
}
};
int main() {
C ob((char*)"Hong", 6, 125);
ob.output_all();
cout << ob.output_1() << " " << ob.output_2() << " " << ob.output_3() << endl;
return 0;
}
실행 결과
P1의 생성자 실행
P2의 생성자 실행
C의 생성자 실행
Hong 6 125
Hong 6 125
- Child클래스 C가 두 개의 parent 클래스 P1과 P2를 직접 상속 받고 있다.
- 클래스 C의 객체 ob가 생성될 때, 생성자 함수는 Parent 클래스를 지정한 순서(좌에서 우)인 P1→P2 →C 순서로 호출되어 실행된다.
참고
1. 장인성 외 5인, (초보자도 쉽게 따라 할 수 있는) C++프로그래밍, 광문각, 2017.02.13
'C++ 기초 1' 카테고리의 다른 글
[C++] 5-1 기본 클래스 포인터 (Base class pointer) (1) | 2023.12.27 |
---|---|
[C++] 4-5 가상 기본 클래스 (Virtual base class) (0) | 2023.12.26 |
[C++] 4-3 부모 클래스의 생성자 매개변수 전달 (1) | 2023.12.21 |
[C++] 4-2 상속 클래스의 생성자와 소멸자 (0) | 2023.12.20 |
[C++] 4-1 클래스의 상속 (inheritance) (1) | 2023.12.19 |