为了账号安全,请及时绑定邮箱和手机立即绑定

写出下面程序的运行结果,请给出详细思路

写出下面程序的运行结果,请给出详细思路

C++
犯罪嫌疑人X 2018-07-06 10:18:43
#include using namespace std;class Base{int x;public:Base(int b):x(b){}virtual void display(){cout< }};class Derived:public:Base{int y;public:Derived(int d):Base(d):y(d){}void display(){cout }};int main(){Base b(3);Derived d(4);b.display();d.display();Base *p=&d;p->display();return ();}
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

首先,你的程序是错的,讨论一个无法编译的程序的结果毫无意义。

所以,我修改了这个程序,在修改的时候我尽量保持它和你的意图保持一致,但是你原先是什么意图,我并不能100%知道,所以这个前提你必须知道。

下面是修正的程序,我的分析基于这个程序:

#include <iostream>
using namespace std;
class Base{
int x;
public:
Base(int b):x(b){}
virtual void display()
{
    cout<<x<<endl;
}
};
class Derived:public Base{
int y;
public:
Derived(int d):Base(d),y(d){}
void display(){
cout<<y<<endl;
}
};
int main(){
Base b(3);
Derived d(4);
b.display();
d.display();
Base *p=&d;
p->display();
return 0;
}

这个程序的结果是
3
4
4


第一行输出3,这个没什么好分析的,
第二行,你的构造函数传入了4,这个构造函数分别将base里定义的x和Derived定义的y设置成了4
d.display();调用的是派生类的display,输出的是y,也就是4
第三行p->display();调用的是虚函数display,因为派生类覆盖了display,所以还是调用的派生类的display,此时输出的还是派生类的y,所以还是4。

再多说一句,如果去掉virtual void display()的virtual,结果虽然还是 3 4 4,但是这两个4的含义就不同了,前者是派生类的y,后者是基类的x
最后说一句,基类的display永远看不见派生类的y。


查看完整回答
反对 回复 2018-08-05
  • 1 回答
  • 0 关注
  • 928 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信