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();
};
最佳答案
它们完全不同。第一组将 Bfun1
和 Bfun2
定义为虚函数,允许在派生类中覆盖它们并通过基类指针在派生类中调用它们:
// 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 问题,我认为我们有一个关于该主题的问题。
关于c++ - 虚拟继承查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6164930/