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