首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-10-11 
c++//虚函数的例子,不明白!为什么head类的printticket函数的 Decorator::printTicket()不直接打印cout

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

热点排行