标签:
1 //送礼的抽象类 2 class givegift { 3 public: 4 givegift(); 5 virtual ~givegift(); 6 virtual void giveDolls() = 0; 7 virtual void giveFlows() = 0; 8 };//这里没什么好实现的,因此就不写了
2、写被代理的抽象类,即题目中的哥们A扮演的角色。这里的业务仅仅是送礼,因此不需要加入其它内容
//被代理的类。 class pursuerGiveGift:public givegift{ public: pursuerGiveGift(schoolGirl girl); pursuerGiveGift(){}; virtual ~pursuerGiveGift(); virtual void giveDolls();//实现送礼的函数 virtual void giveFlows(); private: schoolGirl girl;//需要指导这个美女的名字,因此组合了美女类对象 }; /*实现该类中的成员函数*/ pursuerGiveGift::pursuerGiveGift(schoolGirl girl) { this->girl = girl; } pursuerGiveGift::~pursuerGiveGift() { } void pursuerGiveGift::giveDolls() { //这种方法访问不到girl.name。因为这个成员是私有的。在pursuerGiveGift类中,只是组合了schoolGirl这个类 // cout << this->girl.nm << "送你的洋娃娃!" << endl; this->girl.show(); cout << "送你的洋娃娃!" << endl; } void pursuerGiveGift::giveFlows() { // cout << this->girl.nm << "送你的玫瑰花!" << endl; this->girl.show(); cout << "送你的玫瑰花!" << endl; }
3、实现一个代理类,它的功能与被代理的类相同。只是没有它里面的功能全部是调用被代理类去实现的。
//代理者类。同样继承givegift class agentGiveGift:public givegift{ public: agentGiveGift(pursuerGiveGift pursuer); virtual ~agentGiveGift(); virtual void giveDolls(); virtual void giveFlows(); private: pursuerGiveGift pursuer; }; /*实现该类中的函数*/ agentGiveGift::agentGiveGift(pursuerGiveGift pursuer){ this->pursuer = pursuer; } agentGiveGift::~agentGiveGift() { // TODO Auto-generated destructor stub } void agentGiveGift::giveDolls() { this->pursuer.giveDolls();//这里的代理者只是去调用追求者,但是正真做事情的还是最求者 } void agentGiveGift::giveFlows() { this->pursuer.giveFlows(); }
4、实现女孩类
class schoolGirl { public: schoolGirl(string name); schoolGirl(){}; virtual ~schoolGirl(); void show(); private: string nm; }; /*实现该类中的函数*/ schoolGirl::schoolGirl(string nm) { this->nm = nm; } schoolGirl::~schoolGirl() { // TODO Auto-generated destructor stub } void schoolGirl::show() { cout << this->nm; }
5、调用示例
void fun() { givegift *p; schoolGirl girl("美女");//创建一个美女 pursuerGiveGift pursuer(girl);//创建一个追求者 agentGiveGift agent(pursuer);//创建一个代理者(需要代理谁这里的构造函数中就传谁进去)。让代理追求者去追美女 p = &agent; p->giveDolls();//代理者给美女送花,美女只认识代理者,但是不知道真正最求她的人是谁 p->giveFlows(); /*这里可以这样调用,因为它们的父类都是givegift。这样它们就有共同的接口,调用效果一样。 *这就是为什么要让pursuerGiveGift类和agentGiveGift类都去继承givegift类的原因*/ // p = &pursuer; // p->giveDolls(); // p->giveFlows(); } int main(int argc, char *argv[]) { fun(); return 0; }
标签:
原文地址:http://www.cnblogs.com/zxtp/p/4920735.html