#include <iostream> using namespace std; class Interface { public: virtual void GiveFlower() = 0; virtual void GiveChoclete() = 0; virtual void GiveDoll() = 0; }; class SchoolGirl { public: SchoolGirl(const string &str):name(str){} string& getGirlName() { return name; } private: string name; }; class RealPursuit : public Interface { public: RealPursuit(SchoolGirl *g):girl(g){} virtual void GiveFlower() { cout << girl->getGirlName() << ",给你花" << endl; } virtual void GiveChoclete() { cout << girl->getGirlName() << ",给你巧克力" << endl; } virtual void GiveDoll() { cout << girl->getGirlName() << ",给你娃娃" << endl; } private: SchoolGirl* girl; }; class Proxy : public Interface { public: Proxy(SchoolGirl * girl) { rp = new RealPursuit(girl); } virtual void GiveFlower() { rp->GiveFlower(); } virtual void GiveChoclete() { rp->GiveChoclete(); } virtual void GiveDoll() { rp->GiveDoll(); } private: RealPursuit *rp; }; int main(void) { SchoolGirl girl(string("小美女")); Proxy daili(&girl); daili.GiveFlower(); daili.GiveChoclete(); daili.GiveDoll(); return 0; }