两人合作审阅C++装饰模式
2016-04-21 21:24
375 查看
<span style="font-family: Arial, Helvetica, sans-serif;">#pragma once</span>
#include<iostream> #include<string> using namespace std; class Ship { public: virtual void run() = 0; virtual void shot() = 0; }; class NorthCarolina :public Ship { public: void run() { cout << "NorthCarolina is running." << endl; }; void shot() { cout << "NorthCarolina is shotting." << endl; }; }; class Iowa :public Ship { public: void run() { cout << "Iowa is running." << endl; }; void shot() { cout << "Iowa is shotting." << endl; }; }; class Decorator :public Ship { public: Decorator(Ship* ship) :ship(ship) {}; void run() { ship->run(); } void shot() { ship->shot(); } protected: Ship* ship; }; class ScoutPlane :public Decorator { string scout; public: ScoutPlane(Ship* ship) :Decorator(ship) {} void setScout() { scout = "Searching......"; }; void getScout() { cout << scout << endl; } void run() { ship->run(); setScout(); getScout(); } void shot() { ship->shot(); } }; class Ammu :public Decorator { string ammu; public: Ammu(Ship* ship) :Decorator(ship) {} void setAmmu() { ammu = "AP"; }; void getAmmu() { cout << "shotting " << ammu << "." << endl; } void run() { ship->run(); } void shot() { ship->shot(); setAmmu(); getAmmu(); } };
<pre name="code" class="cpp">#include"header.h" using namespace std; int main() { Ship* ship1(new Iowa); Ship* ship2(new NorthCarolina); ship1->run(); ship1->shot(); cout << "----------------" << endl; ship2->run(); ship2->shot(); cout << "----------------" << endl; Ship* ship3(new Ammu(ship1)); ship3->run(); ship3->shot(); cout << "----------------" << endl; Ship* ship4(new ScoutPlane(ship3)); ship4->run(); ship4->shot(); cout << "----------------" << endl; Ship* ship5(new ScoutPlane(ship2)); ship5->run(); ship5->shot(); system("pause"); return 0; }
练习使用C++装饰模式,代码并不是很难,所以没有加注释。
已经全部检查过,编译通过,主要就是理解装饰模式是如何一层一层的把需求加到对象身上。
相关文章推荐
- 二叉排序树的C++实现,包括难点删除
- C语言贪食蛇
- 2016年4月21日 21:18:25 我的第一篇博客~
- effective C++ 读书笔记 条款08
- c和c++栈
- c++map基本操作
- 如何使用VC++6.0发布程序(即release版本程序)
- 程序设计篇(1):学生经验值管理系统(单链表实现)
- 山东省第五届ACM大学生程序设计竞赛-Weighted Median(模拟)
- 循环队列的综合操作(出入队、获取队长度)C语言实现
- char* p与char p[]
- c++实现广义表
- 推荐!国外程序员整理的 C++ 资源大全
- 学习资源(均为转载内容)
- C++面向对象模型
- C++:探究纯虚析构函数以及实现数组的快速排序与链表的归并排序
- C、C++中的关键字总结
- C++和C语言函数相互调用
- C++ primer 5th 习题之10.13
- C++基础知识