我试着了解方法覆盖是如何工作的,不知道为什么输出 2
I try understand How how method Overriding work, couldn't figure why is outputting 2
这是代码 ,这是我使用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声明了一个新的实现。
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 我不知道为什么这段代码会让核心被转储?
- 反转字符串.不知道为什么这个逻辑是错误的.C++
- 没有函数模板的实例与我不知道为什么的参数列表匹配
- if-else 语句仅按特定顺序工作,我不知道为什么
- DirectX 11 引擎在第三次代码改进后没有突然运行,我不知道为什么
- 函数抛出seg错误,我不知道为什么
- 我不知道为什么复制构造函数的调用在 c++ 中不稳定
- 随着时间的推移,我的程序越来越慢,我不知道为什么.内存泄漏
- 分段故障(核心转储)-不知道为什么
- "错误:在'.标记'之前出现预期的主表达式,我不知道为什么
- 我正在制作c ++代码,但发生错误我不知道为什么
- std::cout << glGetString(GL_RENDER) << std::endl;抛出错误但不GL_Renderer或GL_Verision,我不知道为什么?
- 不知道为什么它不会停止循环
- 我的Arduino串行命令行不起作用,我不知道为什么
- 我正在编写一个拆分为 3 的合并排序,我不知道为什么它不起作用
- C++单例模式代码无法运行,不知道为什么?
- 我不知道为什么我的矢量无法推回
- 罗马数字输出C++总是"-858993460",不知道为什么?
- 合成错误不知道为什么会发生这种情况,请检查一下并告诉我这是我的编码还是视觉工作室