2013-03-19 3 views
3

상속 된 가상 클래스에 대해 다음 코드가 있는데 inh::P1char으로 컴파일됩니다. 컴파일러가이 예제에서 char보다 int에 대해 inh::P1을 선택한 이유를 설명 해주십시오. 감사!가상 상속 멤버 찾아보기

#include <iostream> 

class myClass {public: typedef int P1;}; 
class myClassdef : virtual public myClass {}; 
class myClass2 : virtual public myClass { public: typedef char P1;}; 
class inh : public myClassdef, public myClass2 {}; 

int main() 
{ 
    std::cout << sizeof(inh::P1) << std::endl; 
    return 0; 
} 

답변

4
sizeof(inh::P1); 

룩업 가장 직접적인 레벨에서 발생하고 따라서 위쪽 inh::P1가 실제로 , char의 인 myClass2을 상속되는 P1을 말한다.

sizeof(myClass::P1); 

참고 : 당신은 맨 위의 기본 클래스 사용 멤버를 참조해야하는 경우

하는 당신이 INH 호출 할 때 인해 조회, 가까운 수준에서 수행되는 다중 상속에 기본적으로
inh::P1   ---> Refers to immediate base member, i.e: myClass2::P1 
myClass2::P1  ---> Refers to member in current class scope, i.e: myClass2::P1 
myClassdef::P1 ---> Refers to immediate base member, i.e: myClass::P1 
myClass::P1  ---> Refers to member in current class scope, i.e: myClass::P1 
1

:: P1, myClass2의 P1이 호출됩니다. myClass를 참조하려면 다음과 같이 명시 적으로 호출하십시오.

sizeof(myClass::P1);