본문 바로가기

CS/C++

[C++] 다중상속(Multiple inheritance)

728x90

1. 다중상속


C++에서는 하나이상의 클래스를 상속받을 수 있습니다. 이것을 다중상속(Multiple inheritance)라고 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
using namespace std;
 
class A{
public:
    A_F(){
        cout << "AAA::sss" << endl;
    }
};
 
class B{
public:
    B_F(){
        cout << "BBB::sss" << endl;
    }
};
 
class C:public A,public B{
public:
    C_F(){
        A_F();
        B_F();
    }
};
 
int main(int argc, char** argv) {
    C myC;
    myC.A_F();
    myC.B_F();
    myC.C_F();
    return 0;
}
cs

출력화면

AAA::sss

BBB::sss

AAA::sss

BBB::sss

<그림으로 표현한 다중 상속>


클래스C는 A와B의 멤버함수에 모두 접근하여 사용하고 있습니다.



2.다중상속의 모호성


다중상속에서는 상속받는 클래스에서 같은 이름의 멤버함수가 있을 때에는 어느 함수를 호출해야 할지 모르기 때문에 모호성(ambigious)이 발생할 수 있습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;
 
class A{
public:
    F(){
        cout << "AAA::sss" << endl;
    }
};
 
class B{
public:
    F(){
        cout << "BBB::sss" << endl;
    }
};
 
class C:public A,public B{
public:
    C_F(){
    }
};
 
int main(int argc, char** argv) {
    C myC;
    myC.F();//함수 F가 어떤 클래스의 F인지 알수없는 모호성이 발생한다. 
    return 0;
}
cs


'CS > C++' 카테고리의 다른 글

[C++]템플릿(template)  (0) 2016.06.07
[C++]다형성(Polymorphism)  (0) 2016.06.07
[C++]복사생성자(Copy Constructor)  (0) 2016.06.07
[C++]상속 접근 지시자  (0) 2016.06.07