c++派生类使用问题!!!!//很奇怪
h.printTicket();输出语句调用一次 为啥head foot俩个类printTicket输出函数都会被调用;而且foot的printTicket输出语句中Decorator::printTicket();调试时,被调用了呀怎么没输出出来???
#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;}
void Has(){
cout<< "Person" <<endl;
if(pImp)pImp->Has();
}
private:
virtualPerson *pImp;
};
class Decorator:public virtualPerson
{
public:
Decorator(virtualPerson* p):pImp(p){};
void Has(){
if(pImp)pImp->Has();
}
private:
virtualPerson *pImp;
};
class Head:public Decorator
{
public:
Head(virtualPerson* p):Decorator(p){};
Head():Decorator(0){};
void Has(){
Decorator::Has();
cout<< "Head" <<endl;
}
};
class Foot:public Decorator
{
public:
Foot(virtualPerson* p):Decorator(p){};
Foot():Decorator(0){};
void Has(){
Decorator::Has();
cout<< "Foot" <<endl;
}
};
int main(void)
{
Person p;
p.setcontent(new Head(new Foot()));
p.Has();
return 0;
}