请问一个关于在实例化一个对象时的有关问题
请教一个关于在实例化一个对象时的问题!
如上红色标注所示,写成 myflycar后,输出了两次“可以飞”!这是为什么?详细的原因是什么?
------解决思路----------------------
FlyCarDirector myflycar = new FlyCarDirector(myswimcar);
这相当于
FlyCarDirector *p = new FlyCarDirector(myswimcar);
FlyCarDirector myflycar = p; // 这句会以 p 为参数构造 myflycar
所以 myflycar.show() 会首先调用 p->show() ,这会打印一个 “可以飞" (因为 p 本身是一个 FlayCarDirector 的对象的指针),然后 调用 myflycar 自己的 FlyCar() ,在打印一个 "可以飞”
#include<iostream>
using namespace std;
class Car
{
public:
virtual void show() = 0;
};
class RunCar :public Car
{
public:
virtual void show()
{
cout << "可以跑!" << endl;
}
};
class SwimCarDirector :public Car
{
public:
SwimCarDirector(Car *car)
{
m_car = car;
}
void SwimCar()
{
cout << "可以游!" << endl;
}
virtual void show()
{
m_car->show();
SwimCar();
}
private:
Car* m_car;
};
class FlyCarDirector :public Car
{
public:
FlyCarDirector(Car *car)
{
m_car = car;
}
void FlyCar()
{
cout << "可以飞!" << endl;
}
virtual void show()
{
m_car->show();
FlyCar();
}
private:
Car* m_car;
};
void main()
{
Car *mycar = NULL;
mycar = new RunCar;
cout << "初级:---" << endl;
mycar->show();
cout << endl;
cout << "升级游:---" << endl;
SwimCarDirector *myswimcar = new SwimCarDirector(mycar);
myswimcar->show();
cout << endl;
cout << "升级飞:---" << endl;
FlyCarDirector myflycar = new FlyCarDirector(myswimcar);
myflycar.show();
delete mycar;
//delete myflycar;
delete myswimcar;
}
如上红色标注所示,写成 myflycar后,输出了两次“可以飞”!这是为什么?详细的原因是什么?
------解决思路----------------------
FlyCarDirector myflycar = new FlyCarDirector(myswimcar);
这相当于
FlyCarDirector *p = new FlyCarDirector(myswimcar);
FlyCarDirector myflycar = p; // 这句会以 p 为参数构造 myflycar
所以 myflycar.show() 会首先调用 p->show() ,这会打印一个 “可以飞" (因为 p 本身是一个 FlayCarDirector 的对象的指针),然后 调用 myflycar 自己的 FlyCar() ,在打印一个 "可以飞”