装饰模式C++实现
2016-07-27 15:49
363 查看
#include <iostream> #include <string> class Person { public: Person() = default; virtual void showDecorator() { return; } }; class Man : public Person { public: Man() = default; Man(std::string str) : Name(str){} void showDecorator() { std::cout << Name << "装饰: "; } private: std::string Name; }; class Women : public Person { public: Women() = default; Women(std::string str) : Name(str){} void showDecorator() { std::cout << Name << "装饰: "; } protected: private: std::string Name; }; class Decorator : public Person { public: Decorator() = default; Decorator(Person* p) :persond(p){} virtual void showDecorator() { persond->showDecorator(); } private: Person* persond; }; class DecoratorA : public Decorator { public: DecoratorA() = default; DecoratorA(Person* p) :Decorator(p){} void showDecorator(){ Decorator::showDecorator(); addDecrator(); } protected: private: void addDecrator() { std::cout << "头发 "; } }; class DecoratorB : public Decorator { public: DecoratorB() = default; DecoratorB(Person *p) : Decorator(p){} void showDecorator(){ Decorator::showDecorator(); addDecorator(); } protected: private: void addDecorator(){ std::cout << "服装 "; } }; void main() { Person *ps = new Man("张三"); Person *hair = new DecoratorA(ps); Person *clothes = new DecoratorB(hair); clothes->showDecorator(); delete clothes; delete hair; delete ps; return; }
相关文章推荐
- 使用STL进行字符串分割(C++)
- 【C/C++】利用可变参数模拟实现printf
- c++调用动态链接库DLL
- 第18周 C语言实战105例 实例2:递增递减操作符
- [LeetCode练习题-C语言]169. Majority Element
- C++继承方式梳理
- C/C++求职宝典21个重点笔记(常考笔试面试点)
- 杂——C++
- VC++编程实现修改EXE文件图标
- C++ text file process summary
- #尺取法 --由codeforces 701C They are EveryWhere为例
- C++:IO流条件状态
- Leetcode 59. Spiral Matrix II (Medium) (cpp)
- c++ 内存管理
- C++拷贝构造函数详解
- 错误:fatal error C1189: #error : The C++ Standard Library forbids macroizing keywords. Enable warning
- 5-31 笛卡尔树
- Leetcode 54. Spiral Matrix (Medium) (cpp)
- 一个项目调用另一个项目中的函数
- 转载一份C++线程池的代码,非常实用