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

#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 ();
}

犯罪嫌疑人X
浏览 935回答 1
1回答

慕的地6264312

首先,你的程序是错的,讨论一个无法编译的程序的结果毫无意义。所以,我修改了这个程序,在修改的时候我尽量保持它和你的意图保持一致,但是你原先是什么意图,我并不能100%知道,所以这个前提你必须知道。下面是修正的程序,我的分析基于这个程序:#include&nbsp;<iostream> using&nbsp;namespace&nbsp;std; class&nbsp;Base{ int&nbsp;x; public: Base(int&nbsp;b):x(b){} virtual&nbsp;void&nbsp;display() { &nbsp;&nbsp;&nbsp;&nbsp;cout<<x<<endl; } }; class&nbsp;Derived:public&nbsp;Base{ int&nbsp;y; public: Derived(int&nbsp;d):Base(d),y(d){} void&nbsp;display(){ cout<<y<<endl; } }; int&nbsp;main(){ Base&nbsp;b(3); Derived&nbsp;d(4); b.display(); d.display(); Base&nbsp;*p=&d; p->display(); return&nbsp;0; }这个程序的结果是344第一行输出3,这个没什么好分析的,第二行,你的构造函数传入了4,这个构造函数分别将base里定义的x和Derived定义的y设置成了4d.display();调用的是派生类的display,输出的是y,也就是4第三行p->display();调用的是虚函数display,因为派生类覆盖了display,所以还是调用的派生类的display,此时输出的还是派生类的y,所以还是4。再多说一句,如果去掉virtual void display()的virtual,结果虽然还是 3 4 4,但是这两个4的含义就不同了,前者是派生类的y,后者是基类的x最后说一句,基类的display永远看不见派生类的y。
打开App,查看更多内容
随时随地看视频慕课网APP