2016년 3월 13일 일요일

[c++] 다중상속

다중 상속 
  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 함수는 어느 객체의 함수를 호출해 주는 것이냐 알수 없기 때문이다. 주석친 부분 처럼 범위 지정 연산자를 이용한 문제 해결 방법도 있지만, 아주 코드가 복잡해 지는걸 알수 있는것이다. 

댓글 없음:

댓글 쓰기

[Effective C++] 항목 30 : 인라인 함수는 미주알고주알 따져서 이해해 두자.

인라인 함수를 사용하면 컴파일러가 함수 본문에 대해 문맥별 최적화를 걸기가 용이해집니다. 인라인 함수의 아이디어는  함수 호출문을 그 함수의 본문으로 바꿔치기하자는 것  남발했다가는 코드의 크기가 커질 게 뻔하다. 인라인 함수로 부풀려진 ...