c++派生类使用有关问题!//很奇怪

c++派生类使用问题!!!!//很奇怪
c++派生类使用有关问题!//很奇怪

h.printTicket();输出语句调用一次 为啥head foot俩个类printTicket输出函数都会被调用;而且foot的printTicket输出语句中Decorator::printTicket();调试时,被调用了呀怎么没输出出来???




#include <iostream>
using namespace std;

class Ticket{
public:
virtual void printTicket()
{
cout<< "\n ticket" <<endl;
}
};

class Decorator:public Ticket{
Ticket* mticket;
public:
Decorator(Ticket* t){mticket = t;}
void printTicket()
{
if(mticket!=NULL)
{
mticket->printTicket();
}
}
};

class Head:public Decorator{
public:
Head(Ticket* t):Decorator(t){}
void printTicket()
{
cout << "\n head" <<endl;
Decorator::printTicket();
}
};

class Foot:public Decorator{
public:
Foot(Ticket* t):Decorator(t){}
void printTicket()
{
Decorator::printTicket();
cout<<"\n foot"<<endl;
}
};


Ticket t;
Foot f(&t);
Head h(&f);
h.printTicket();

------解决方案--------------------
输出没问题:

首先
Head.printTicket 会打印 head
Head.printTicket 显示调用的 Decorator.printTicket

Decorator.printTicket 通过Ticket* 调用printTicket,多态的,而Head构造函数传进去的是Foot的实例,所以实际调用的是Foot.printTicket

同理,Foot.printTicket 通过Ticket* 调用printTicket,多态的,而Foot构造函数传进去的是Ticket的实例
所以实际调用的是Ticket.printTicket ,打印ticket 

接着Foot.printTicket 打印 foot

所以输出就是

head

ticket

foot
------解决方案--------------------
楼主这是要玩造人游戏吗 c++派生类使用有关问题!//很奇怪
仅供参考:
#include <iostream>
using namespace std;

class virtualPerson
{
public:
virtual void Has() = 0;
};

class Person:public virtualPerson
{
public:
Person(virtualPerson *p):pImp(p){};
Person():pImp(0){};
void setcontent(virtualPerson* p){pImp = p;}