class C1 {
void A();
void B();
}
void C1::A(){ return B(); }
class C2 : public C1 {
void B();
}
C2 *obj = new C2;
obj->A(); // returns B() from C1
为什么来自C1的B()被调用?如何使A()仅存在于C1中并从C2调用B()?
答案 0 :(得分:9)
您需要在B()
virtual
函数中设置C1
。
虚函数基本上是函数指针,它们在初始化对象时获取它们的值。如果您new C1
,则函数指针将指向C1::B
,而如果您new C2
该函数指针指向C2::B
。
注意:要详细了解virtual
及相关主题,请搜索功能覆盖和多态。
答案 1 :(得分:2)
默认情况下,C ++中的成员方法不是virtual
(你是来自Java)吗?
当你写:
class C1 {
void A();
void B();
}
class C2 : public C1 {
void B();
}
你在<{1}}中覆盖 B()
,但隐藏。
要覆盖它,您必须在基类中声明它C2
(后续类中的虚拟不是必需的)。