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++ 中具有公共继承的虚函数和私有成员的主要内容,如果未能解决你的问题,请参考以下文章