Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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++;调用子函数_C++_Inheritance_Overriding - Fatal编程技术网

C++ C++;调用子函数

C++ C++;调用子函数,c++,inheritance,overriding,C++,Inheritance,Overriding,如何获取此代码段的输出以打印“子类的函数” 我很难理解为什么要写 BaseClass obj = DerivedClass(); 导致类似的输出 #include <iostream> using namespace std; class BaseClass { public: void disp(){ cout<<"Function of Parent Class"; } void dispOther(BaseClass& oth

如何获取此代码段的输出以打印“子类的函数”

我很难理解为什么要写

BaseClass obj = DerivedClass();
导致类似的输出

#include <iostream>
using namespace std;
class BaseClass {
public:
   void disp(){
      cout<<"Function of Parent Class";
   }
   void dispOther(BaseClass& other) {
       other.disp();
   }
};
class DerivedClass: public BaseClass{
public:
   void disp() {
      cout<<"Function of Child Class";
   }
};

BaseClass getInstance() {
   BaseClass obj = DerivedClass();
   return obj;
}

int main() {
   auto obj = getInstance();
   auto obj2 = DerivedClass();
   obj2.dispOther(obj);
   return 0;
}

对象切片
obj
是基类,即使它是从派生类对象分配的

要覆盖派生类中的函数,您需要将
disp()
函数
virtual
,然后尝试以下操作:

DerivedClass d;
BaseClass& obj = d;

obj.disp();

使用指针或引用。使函数虚拟化。阅读一本关于C++的书,你也应该读一点关于切片的内容,看看这个答案:谢谢!因此,将d作为引用可以防止丢失信息,那么?对基类的引用(或指针)可以引用(或指向)派生对象。您还需要将
disp()
函数设置为虚拟函数。考虑到所有其他限制条件和编辑,这与
d.disp()相同我不确定这是如何回答这个问题的。OPs的首要问题是“为什么
基类obj=DerivedClass()
给出了他看到的输出。这两个原因是缺少
虚拟的
和对象切片。除了重写这个答案中的所有如果OPs代码,我真的不确定我还能提供什么。
DerivedClass d;
BaseClass& obj = d;

obj.disp();