C++ 中具有公共继承的虚函数和私有成员

Posted

技术标签:

【中文标题】C++ 中具有公共继承的虚函数和私有成员【英文标题】:Virtual functions and Private members with Public Inheritance in C++ 【发布时间】:2013-12-19 21:44:29 【问题描述】:

当一个类公开继承另一个类时,不应该重写所有虚函数吗? 考虑代码--

class A 
private:
  vector<int> v;
public
  virtual int something() 
    cout << "A" << endl;
    return v.size();
  


class B : public A 
private:
  priority_queue<int> v;
public
  int something() 
    cout << "B" << endl;
    return v.size();
  

现在,当我通过执行语句b.something()class B 的对象b 调用函数something() 时,我得到了输出A。这是为什么呢?

【问题讨论】:

请发布一个完整的工作示例。您发布的内容看起来很好 - 除了它显然是重新输入而不是剪切/粘贴的问题,因为它不会编译 (public sb.public:) 我从你的代码中改编了这个,它打印出“B”。 ideone.com/ADQKFc - 这表明您正在做一些不明显且未包含在您的示例中的事情。你在任何地方复制 B 吗? 我敢打赌你是slicing某处的对象。 【参考方案1】:

更正了错误(请参阅http://codepad.org/ssivYhWb)

#include <iostream.h>

class A 
private:
  vector<int> v;
public:
  virtual int something() 
    cout << "A" << endl;
    return v.size();
  
;

class B : public A 
private:
  priority_queue<int> v;
public:
  int something() 
    cout << "B" << endl;
    return v.size();
  
;

int main() 
  B b;
  b.something();
   return 0;

它返回 B - 正如预期的那样

【讨论】:

以上是关于C++ 中具有公共继承的虚函数和私有成员的主要内容,如果未能解决你的问题,请参考以下文章

C++中,子类会继承父类的虚函数表!对于父类的析构函数(虚函数) 也会继承吗?

C++中的虚函数以及虚函数表

深入理解C++ 虚函数表

C ++继承:具有基类类型的虚函数中派生类类型的参数

9-4:C++多态之单继承和多继承中的虚函数表

Java和C++的虚函数的异同