개발지식창고/C++

상속의 마지막, 다중 상속(Multiple Inheritance)

모과이IT 2010. 11. 14. 23:18
다중 상속이란?  
  1. #include <iostream>   
  2. using namespace std;   
  3.   
  4. class AAA{   
  5. public:   
  6.     void String1(){   
  7.         cout<<"AAA::String1"<<endl;   
  8.     }   
  9. };   
  10.   
  11. class BBB{   
  12. public:   
  13.     void String2(){   
  14.         cout<<"BBB::String2"<<endl;   
  15.     }   
  16. };   
  17.   
  18. class CCC : public AAA, public BBB{    
  19. public:   
  20.     void ShowString(){   
  21.         String1();   
  22.         String2();   
  23.     }   
  24. };   
  25.   
  26. int main(void)   
  27. {   
  28.     CCC ccc;   
  29.     ccc.ShowString();   
  30.   
  31.     return 0;   
  32. }  
 위의 소스 코드만 보면 감이 올것이다. 다중 상속이란 18번째 줄처럼 둘 이상의 클래스를 동시에 상속하는 것이다. 

 다중 상속의 모호성  
  1. #include <iostream>   
  2. using namespace std;   
  3.   
  4. class AAA{   
  5. public:   
  6.     void String(){   
  7.         cout<<"AAA::String"<<endl;   
  8.     }   
  9. };   
  10.   
  11. class BBB{   
  12. public:   
  13.     void String(){   
  14.         cout<<"BBB::String"<<endl;   
  15.     }   
  16. };   
  17.   
  18. class CCC : public AAA, public BBB{   
  19. public:   
  20.     void ShowString(){   
  21.         String();  // AAA::String();   
  22.         String();  // BBB::String();   
  23.     }   
  24. };   
  25.   
  26. int main(void)   
  27. {   
  28.     CCC ccc;   
  29.     ccc.ShowString();   
  30.   
  31.     return 0;   
  32. }  
 위의 소스 코드와 같이 다중 상속의 관계에서 AAA,BBB 클래스에 같은 이름을 가진 멤버 함수가 있다고 하면, 이때 모호성이 발생한다. 과연 이 String 함수는 어느 객체의 함수를 호출해 주는 것이냐 알수 없기 때문이다. 주석친 부분 처럼 범위 지정 연산자를 이용한 문제 해결 방법도 있지만, 아주 코드가 복잡해 지는걸 알수 있는것이다.