c++ - 虚拟继承查询

标签 c++

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();  
};  

最佳答案

它们完全不同。第一组将 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 问题,我认为我们有一个关于该主题的问题。

关于c++ - 虚拟继承查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6164930/

相关文章:

c++ - COM方法调用意外破坏了堆栈

c++ - 是否可以将 long long 返回值分配给 int64_t 而不会丢失 64 位机器中的精度?

c++ - 通过线程分配 for 循环迭代

c++ - (C++) 寻找减少内存使用的技巧

c++ - 使用 Code::Blocks 编写的 SimpleSocket 对 C++ 程序中函数的 undefined reference

c++ - ESP8266WebServer 在类中设置一个值

c++ - 尝试在 Codeblocks 上使用 Boost 库会给出未定义的引用

c++ - 为什么我不需要取消引用 char 指针来输出 c 风格的字符串?

c++ - 预处理器宏扩展到另一个预处理器指令

c++ - 从数组中添加值并插入空间