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 函数之前创建的值没有被父进程和子进程修改两次?