본문 바로가기

C++ 기초 1

[C++] 4-4 클래스 다중 상속

다중 상속

   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