这是导致问题的代码:
class Base
{
public:
virtual void fun()
{
cout<<"Base";
}
};
class Der:public Base
{
Base &pb;
public:
Der(Base&b):pb(b){}
virtual void fun()
{
cout<<"Der...";
pb.fun();
}
};
int main()
{
Der(Der(Base())).fun();
return 0;
}
运行这段代码,结果显示“Der...Base...”!这太神奇了,我想不通为什么结果不是“Der...Der...Base”,这在逻辑上是正确的?!然后我用 Der 类中的成员替换并将Base&pb
代码Base*pb
更改为合法,最后输出正确,即“Der...Der...Base”!调试了一下代码,发现在使用的时候Base&pb
,Der的构造函数只跑了一次,使用Base*pb
的时候,构造函数跑了两次正确!谁能向我解释发生了什么以及为什么?