使用c++装饰器模式完成 QQ秀这个游戏,给动画人物搭配不同服饰。

本文介绍了如何在C++中使用装饰器模式,通过装饰器类(如LongTrouser和Tshiirts)对Person类进行扩展,展示了抽象父类Finery和具体装饰类的构造及show方法的实现。
摘要由CSDN通过智能技术生成

// 比如穿T恤,衬衫,外套,皮鞋,运动鞋,靴子...,根据下面的类图完
//被装饰的类
class Person
{
public:
    string m_name;
    Person() {}; //子类实例化需要无参构造
    Person(string name) :m_name(name) {}
    virtual void show() { cout << m_name; };
};
//装饰器父类 抽象类
class Finery:public Person
{
protected:
    Person* m_per;
public:
    Finery(Person* p) :m_per(p) {}; //这里使用person类无参构造  先父类无参 再子类构造
    //Finery(Person name, Person* perman) :Person(name), m_per(perman) {}
    virtual void show() =0;
};
//具体装饰类
class LongTrouser :public Finery

public:
    LongTrouser(Person* p):Finery(p) {}; //显示构造父类
    void show() { 
        //调用原来的showf方法
        m_per->show();
        //装饰
        cout << "长袜" << endl; 
    }
};
class Tshiirts :public Finery
{
public:
    Tshiirts(Person* p):Finery(p) {};
    void show() {
        m_per->show();
        cout << "长袖" << endl;
    }
};
void test02()
{
    Person* p1 = new Person("孙悟空"); 
    Person* p2 = new Person("李文程"); 
    p1->show();
    cout << endl;
    p2->show();
    cout << endl;
    Person* f1 = new LongTrouser(p1);
    Person* f2 = new Tshiirts(p2);
    f1->show();
    f2->show();
    delete p1;
    delete p2;
    delete f1;
    delete f2;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值