Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 遗产从父类调用子类函数_C++_Oop_Qt - Fatal编程技术网

C++ 遗产从父类调用子类函数

C++ 遗产从父类调用子类函数,c++,oop,qt,C++,Oop,Qt,为什么C1中的B()被调用?如何使A()只存在于C1中并从C2调用B()?您需要在C1中生成B() 虚拟函数基本上是在对象初始化时获取其值的函数指针。如果new C1,函数指针将指向C1::B,而如果new C2,函数指针将指向C2::B 注释:阅读关于虚拟及相关主题,搜索函数重写和多态性。 < P>方法在C++中默认不是虚拟< /> >(你来自java)吗?p> 当你写作时: class C1 { void A(); void B(); } void C1::A(){ re

为什么C1中的B()被调用?如何使A()只存在于C1中并从C2调用B()?

您需要在
C1
中生成
B()

虚拟函数基本上是在对象初始化时获取其值的函数指针。如果
new C1
,函数指针将指向
C1::B
,而如果
new C2
,函数指针将指向
C2::B


<强>注释:阅读关于虚拟及相关主题,搜索函数重写和多态性。

< P>方法在C++中默认不是<代码>虚拟< /> >(你来自java)吗?p> 当你写作时:

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
您没有覆盖
C2
中的
B()
,而是隐藏它


要覆盖它,必须在基类中声明它
virtual
virtual在后续类中是不必要的)。

您不需要在
新C2
中的
之后写入
()
class C1 {
    void A();
    void B();
}

class C2 : public C1 {
    void B();
}