请问一个关于在实例化一个对象时的有关问题

请教一个关于在实例化一个对象时的问题!
#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() ,在打印一个 "可以飞”