C++读程序写结果题,请说明调用 顺序以及原因。

 我来答
lllabbb
2017-06-02 · TA获得超过183个赞
知道小有建树答主
回答量:70
采纳率:100%
帮助的人:47.6万
展开全部

这个题考查的知识点不少,主要的有三点,一是类的继承,虚函数的覆盖,二是构造函数的调用,三是多态。

先说结果:2213

原因:

先说明一下上面提到的三个知识点,一、ONE作为基类有一个虚函数f(),TWO继承了ONE且没有重定义f(),那么TWO中其实有一个与ONE一样的f()函数,THREE继承TWO且重定义了f()函数即覆盖了TWO中的f()函数。那么在调用这两个类的f()函数时,ONE和TWO调用的都是ONE中的f(),而THREE调用时调用的是自己类的定义的f()函数。二构造函数的调用,当创建一个子类的时候必先调用基类的构造函数。三、基类指针可以指向子类对象,当调用虚函数时就触发了多态,即实际是哪个类的对象调用的就是哪个类中定义的函数,若未定义则调用基类的同名函数。

解题:

main()函数

第一行:定义一个ONE的指针p,没有指向任何有效空间,是一个无效指针,不调用任何构造函数

第二行:定义一个TWO的对象bb,此时会先调用ONE的构造函数(啥也没有),再调用TWO的默认构造函数,会打印2

第三行:定义一个THREE对象cc,会先调ONE的构造函数,再调用TWO的构造 函数,打印2,再调用THREE的构造函数

第四行:指针p指向THREE的对象cc的地址,是基类指针指向子类对象,在访问p时可触发多态

第五行:调用p指向对象的f()函数,即调用THREE中定义的f()函数,该函数中先调用了TWO中的f()函数,TWO中没有重定义所以调用ONE的f()函数打印1,再打印3

最终结果就是2213

追问
多谢啦
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式