我对C ++中的虚函数有疑问,例如,A
是基类,类B
继承A
,类C
继承B
1}},我们可以在B
中定义虚拟函数,并在C
中重新定义它吗?我的意思是,这个虚函数是否应该在类A
中定义,因为A
是所有B
的基类(即C
和B
的根) {1}}和C
?
答案 0 :(得分:4)
不是它不一定是...... B是来自A的专门对象,很可能B具有比A更多的特征。如果导出了C,那么从B中重写一个未在A中定义的函数是很正常的。
实施例
答案 1 :(得分:3)
virtual
可以在类层次结构中的任何位置使用,但该虚函数只能在子类中重写(即它不适用于超类)。
struct A {
void funcA();
};
struct B : A {
virtual funcB();
};
struct C : B {
virtual funcB();
};
//....
B* b = new C();
b->funcB(); // calls C's implementation
A* a = new C();
a->funcB(); // fails to compile
答案 2 :(得分:1)
是的,这根本不是问题 - 试试吧:
class A
{
}
class B : public A
{
public:
virtual void myFunc(): { std::cout << "B here!"; }
}
class C : public B
{
public:
virtual void myFunc(): { std::cout << "No, C here!"; }
}