96 lines
1.6 KiB
C++
96 lines
1.6 KiB
C++
#pragma once
|
|
#include "common.hpp"
|
|
|
|
class Person
|
|
{
|
|
public:
|
|
virtual void wear();
|
|
|
|
protected:
|
|
string m_Name;
|
|
};
|
|
|
|
class Engineer :public Person
|
|
{
|
|
public:
|
|
Engineer(string name, string skill) :m_Name(name), m_Skill(skill) {};
|
|
string getSkill();
|
|
virtual void wear();
|
|
|
|
private:
|
|
string m_Skill;
|
|
string m_Name;
|
|
};
|
|
|
|
class Teacher :public Person
|
|
{
|
|
public:
|
|
Teacher(string name, string title) :m_Name(name), m_Title(title) {};
|
|
string getTitle();
|
|
virtual void wear();
|
|
|
|
private:
|
|
string m_Name;
|
|
string m_Title;
|
|
};
|
|
|
|
class ClothingDecorator :public Person
|
|
{
|
|
public:
|
|
~ClothingDecorator();
|
|
|
|
virtual void wear();
|
|
virtual void decorate() = 0;
|
|
|
|
|
|
protected:
|
|
Person* m_pPerson; // ¸¸ÀàÖ¸Õë
|
|
|
|
};
|
|
|
|
class CasualPantDecorator :public ClothingDecorator
|
|
{
|
|
public:
|
|
CasualPantDecorator(Person* pPerson) { this->m_pPerson = pPerson; };
|
|
virtual void decorate();
|
|
|
|
};
|
|
|
|
class BeltDecorator :public ClothingDecorator
|
|
{
|
|
public:
|
|
BeltDecorator(Person* pPerson) { this->m_pPerson = pPerson; };
|
|
virtual void decorate();
|
|
};
|
|
|
|
class LeatherShoesDecorator :public ClothingDecorator
|
|
{
|
|
public:
|
|
LeatherShoesDecorator(Person* pPerson) { this->m_pPerson = pPerson; };
|
|
virtual void decorate();
|
|
|
|
};
|
|
|
|
class KnittedSweaterDecorator :public ClothingDecorator
|
|
{
|
|
public:
|
|
KnittedSweaterDecorator(Person* pPerson) { this->m_pPerson = pPerson; };
|
|
virtual void decorate();
|
|
|
|
};
|
|
|
|
class WhiteShirtDecorator :public ClothingDecorator
|
|
{
|
|
public:
|
|
WhiteShirtDecorator(Person* pPerson) { this->m_pPerson = pPerson; };
|
|
virtual void decorate();
|
|
|
|
};
|
|
|
|
class GlassesDecorator :public ClothingDecorator
|
|
{
|
|
public:
|
|
GlassesDecorator(Person* pPerson) { this->m_pPerson = pPerson; };
|
|
virtual void decorate();
|
|
|
|
}; |