C++调用子函数

Posted

技术标签:

【中文标题】C++调用子函数【英文标题】:C++ calling child function 【发布时间】:2018-06-16 21:31:56 【问题描述】:

如何获取此代码段的输出以打印“子类的功能”?

我很难理解为什么要写作

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;

输出:

Function of Parent Class 

【问题讨论】:

使用指针或引用。使函数虚拟化。读一本关于 C++ 的书。 您可能还应该阅读一些有关切片的知识。 Here are some good C++ books for you 看看这个答案:***.com/a/2392656/472974 【参考方案1】:

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

要覆盖派生类中的函数,您需要创建disp() 函数virtual,然后试试这个:

DerivedClass d;
BaseClass& obj = d;

obj.disp();

【讨论】:

谢谢!那么以 d 作为参考可以防止丢失信息呢? 对基类的引用(或指针)可以引用(或指向)派生对象。 您还需要将disp() 函数设为虚拟。 鉴于您的所有其他附带条件和修改,这将与 d.disp(); 相同,我不确定这如何回答问题。 OPs 的主要问题是“为什么BaseClass obj = DerivedClass () 会给出他看到的输出。两个原因是缺少virtual 和对象切片。除了在这个答案中重写所有的 OPs 代码之外,老实说,我不确定我还能提供什么。

以上是关于C++调用子函数的主要内容,如果未能解决你的问题,请参考以下文章

为啥在调用 c++ fork 函数之前创建的值没有被父进程和子进程修改两次?

分析特定函数 C++

C++调用matlab数学函数问题

自描述C++部分面试题集

JNA 调用c++函数的出错,java能加载库,但是找不到c++写的函数

C++ 在不知道子类型的情况下从父类型调用子方法