我试着了解方法覆盖是如何工作的,不知道为什么输出 2

I try understand How how method Overriding work, couldn't figure why is outputting 2

本文关键字:不知道 为什么 输出 工作 覆盖 方法 试着了解 何工作      更新时间:2023-10-16

这是代码 ,这是我使用Overriden方法老师告诉我们分析代码的作业。我知道代码正在输出2,我不知道此代码如何工作。

public:
   int a;
   virtual void who(void) { a = 1; }
};

class B:public A{
public:
   int a;
   void who(void) { a = 2; }
};
class C :public B {
};
int main(void) {
   A x; B y; C z; A *p;
   p = &z;
   p->who();
   cout << z.a << endl;
       system("pause");
       return 0;
}

b覆盖其父的who((函数,A。这称为多态性。c从B继承,但不会覆盖任何东西;因此,它使用了B的所有实施。P是指向A类A的对象的指针。类继承的关键特征之一是,指向派生类的指针与指向其基类的指针相兼容[1]。

这意味着,当您调用指针(p-> who(((的成员函数,并且指向指向对象的类别覆盖其父母的成员,将使用覆盖成员。

来源:[1] http://www.cplusplus.com/doc/tutorial/polymorphism/

只要您创建具有相同输入和输出的函数,name;简而言之:相同的函数声明。新功能将被使用,因为您指的是具有相同函数的超级类的声明。在你的情况下;C的超级类是B,它看不到A,但是B看到A并使用所有功能,除了B声明了一个新的实现。

相关文章: