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

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

第一行输出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。

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

所以,我修改了这个程序,在修改的时候我尽量保持它和你的意图保持一致,但是你原先是什么意图,我并不能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