理解C+中的继承+; 我正在学习C++,并编写了这个代码。根据我的理解,这段代码需要作为“派生类”生成输出,但输出是“基类”。 请帮助我理解这一点 #include <iostream> using namespace std; class Base { public: char* name; void display() { cout << name << endl; } #包括 使用名称空间std; 类基{ 公众: 字符*名称; void display(){ cout

理解C+中的继承+; 我正在学习C++,并编写了这个代码。根据我的理解,这段代码需要作为“派生类”生成输出,但输出是“基类”。 请帮助我理解这一点 #include <iostream> using namespace std; class Base { public: char* name; void display() { cout << name << endl; } #包括 使用名称空间std; 类基{ 公众: 字符*名称; void display(){ cout,c++,inheritance,C++,Inheritance,您需要使display()方法virtual 像这样: class Base{ public: char* name; virtual void display() { cout << name << endl; } 类基{ 公众: 字符*名称; 虚拟空显示(){ cout 非虚成员函数是静态解析的 成员函数是基于 指向对象的指针(或引用)的类型 相反,虚拟成员函数是动态解析的(在 也就是说,成员函数是动态选择的(

您需要使
display()
方法
virtual

像这样:

class Base{ 
    public: 
    char* name; 
    virtual void display() { 
         cout << name << endl; 
 } 
类基{
公众:
字符*名称;
虚拟空显示(){
cout

非虚成员函数是静态解析的 成员函数是基于 指向对象的指针(或引用)的类型

相反,虚拟成员函数是动态解析的(在 也就是说,成员函数是动态选择的(在 运行时)基于对象的类型,而不是 指向该对象的指针/引用


如果希望通过基类指针调用派生类函数,则需要将基类函数设置为虚拟函数。在函数中添加关键字virtual,代码就可以运行了。

C++分派有点奇怪。除非声明显示方法“virtual”,否则bptr->display始终会调用基类的显示


更详细的解释是多态性(一般使用指向派生类实例的基类指针)通过分派到虚拟函数完成,如其他答案中所述。但是,如果使用基类指针指向派生类,则将使用基类的数据成员,因为编译器不知道派生类的数据成员,调用基类的函数也是如此,因此基类
display()
函数使用基类
名称
数据成员,结果是“基类”

@andy..将其虚拟化后,其输出是“派生类基类”…但我只希望是“派生类”@someone:为什么不应该呢?您编写了
cout
class Base{ 
    public: 
    char* name; 
    virtual void display() { 
         cout << name << endl; 
 }