2013-02-11 3 views
2

다음 코드는 클래스 B에서 함수 F를 호출하지만 누군가 제게 왜 그런지 설명해 줄 수 있습니다. B 클래스의 메서드가 V 클래스의 메서드를 오버로드 할 가능성이 있습니까 (B가 V에서 상속 되었기 때문에)? 미리 감사드립니다.C++에서의 클래스 상속

#include <iostream> 
using namespace std; 

class V{ 
public: 
    void f(){ x+=2; cout << "V:"<< x;}; 
    int x; 
}; 
class B: public virtual V{ 
public: 
    void f(){ x+=3; cout << "B:"<< x;}; 
    int x; 
}; 
class D: public B, virtual public V{ 
public: 
    void g(){ x++; f(); } 
}; 
void main(){ 
    D ins; 
    ins.x = 1; 
    ins.g(); 
} 

답변

1

아니,이 일에는 과부하가 없다. 위에서 답한대로, B의 f()는 V의 f()를 간단히 감추고, D는 B와 V 모두로부터 상속 받고, B는 두 가운데서 가장 많이 파생되므로 B에서 f()를 취합니다. V가 B에서 이미 포함되어 있기 때문에 V를 D에서 상속하는 것은 필요하지 않습니다.