读书人

c++//虚函数的例证不明白

发布时间: 2013-10-11 14:52:39 作者: rapoo

c++//虚函数的例子,不明白!

为什么head类的printticket函数的 Decorator::printTicket()不直接打印cout<< "\n ticket" <<endl;
而foot类的printticket函数的 Decorator::printTicket()直接打印cout<< "\n ticket" <<endl;
结果:
head
ticket
foot


#include <iostream>
using namespace std;



#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;
}
};


int _tmain(int argc, _TCHAR* argv[])
{
Ticket t;
Foot f(&t);
Head h(&f);
h.printTicket();
return 0;
}

[解决办法]
>>为什么head类的printticket函数的 Decorator::printTicket()不直接打印cout<< "\n ticket" <<endl;
因为Head对象里的构造将Foot对象的指针赋值给mticket,所以Decorator::printTicket();会调用foot里的printTicket,

>>而foot类的printticket函数的 Decorator::printTicket()直接打印cout<< "\n ticket" <<endl;
foot对象创建时,使用的是Ticket对象的指针,所以Decorator::printTicket()会调用Ticket中的printTicket

读书人网 >C++

热点推荐