我有从派生类派生的类,例如:
class A
{
public:
virtual void doSomething() {}
virtual ~A{}
};
class B : public A
{
//...something...
void doSomething() {}
}
class C : public B
{
//...something...
void doSomething() {}
}
class D : public B, public C
{
//...something...
void doSomething() {}
}
我的问题如标题所述:无论我如何使用它,我是否只需要基类中的虚函数?
例如:
A *p = new B
delete p;
B *p2 = new C
delete p2;
答案 0 :(得分:5)
如果在父类中声明虚拟成员函数,则它们是虚拟的。 这意味着在你的情况下
class C : public B
{
//...something...
void doSomething() {}
};
相当于
class C : public B
{
//...something...
virtual void doSomething() {}
};
但第二种选择更明确,隐藏意义更少。
从 c ++ 11 开始,更好的选择是:
class C : public B
{
//...something...
void doSomething() override {}
};
除了清楚地表明你的意图之外,编译器不会编译基类和派生类的函数签名不匹配的代码。
请务必在所有继承的类中使用虚拟析构函数。
答案 1 :(得分:-2)
回答你的问题:
virtual
,如果你想要像你一样派生它们。很少评论:
1-这个class D : public B, public C
在你的例子中没有任何意义。
2-你确定你不必虚拟地得出这两个(假设有意义推导出来)?
你可以提供一个例子或问题吗?所以我们可以更好地解决。