遗产。从父类调用子类函数

时间:2012-03-28 13:22:28

标签: c++ oop qt

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()?

2 个答案:

答案 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(后续类中的虚拟不是必需的)。