2011-05-28 97 views
0
class Base { 
public: 
    Base(){ } 
    virtual void Bfun1(); 
    virtual void Bfun2(); 
}; 

class Derv : public Base { 
public: 
    Derv(){ } 
    void Dfun1(); 
}; 

上面的定义和下面的定义有区别吗?他们是一样的吗?如果不是两者在功能上有什么不同?虚拟继承查询

class Base { 
public: 
    Base(){ } 
    void Bfun1(); 
    void Bfun2(); 
}; 

class Derv : public virtual Base { 
public: 
    Derv(){ } 
    void Dfun1(); 
}; 
+0

typo ..阅读构造函数为public。 class base { public: Base(){} virtual void Bfun1(); virtual void Bfun2(); }; class Derv:public Base { Derv(){} void Dfun1(); }; 上面的定义和下面的定义有区别吗?他们是一样的吗?如果不是两者在功能上有什么不同? class base { Base(){} public: void Bfun1(); void Bfun2(); }; class Derv:public virtual Base { Derv(){} public: void Dfun1(); }; – irappa 2011-05-28 23:14:55

+0

简答:是的,他们不一样。长答案:读你的书;) – 2011-05-28 23:17:54

+0

阅读建议:[什么是“可怕的钻石”?](http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.8)。 .. [[我应该使用虚拟继承吗?](http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.9) – Nawaz 2011-05-28 23:26:44

回答

2

它们完全不同。所述第一组定义了Bfun1Bfun2虚拟函数,其允许覆盖他们在派生类,并通过基类指针调用这些派生类:然而

// assume you've overridden the functions in Derived 
Base* base_ptr = new Derived; 
base_ptr->Bfun1(); // will call function in derived 

第二盘,他们只是正常功能。相反,您声明基类为virtual,它具有许多暗示,您最好在a good C++ book中阅读有关内容或者搜索SO问题,我认为我们有关于该主题的一个问题。