"Understanding Inheritance in C++"(理解C++中的继承)

33 浏览
0 Comments

"Understanding Inheritance in C++"(理解C++中的继承)

这个问题已经在这里有了答案:

为什么我们需要在C ++中使用虚函数?

我正在尝试学习C ++并编写了这段代码。 根据我的理解,这段代码应该产生输出“Derived Class” ,但输出是“Base Class”

请帮助我理解这个问题。

#include  
using namespace std; 
class Base { 
    public: 
    char* name; 
    void display() { 
         cout << name << endl; 
    } 

};

class Derived: public Base { 
   public: 
   char* name; 
   void display() { 
       cout << name << ", " << Base::name << endl; } }; int main() { Derived d; d.name = "Derived Class"; d.Base::name = "Base Class"; Derived* dptr = &d; Base* bptr = dptr; bptr->display();
}

请把我视为初学者并解释为什么它的输出是“Base Class”

admin 更改状态以发布 2023年5月23日
0
0 Comments

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

0
0 Comments

你需要将 display() 方法设置成 virtual。\n像这样:

class Base{ 
    public: 
    char* name; 
    virtual void display() { 
         cout << name << endl; 
 } 

。\nvirtual 允许派生类\"覆盖\"基类的函数。

0