C++抽象编程——回溯算法(2)——准备Direction文件
来源:互联网 发布:网络监控系统结构图 编辑:程序博客网 时间:2024/06/18 00:49
我记我们在提到方块走动的位置的时候,说过它有三种走法。但是那个时候是因为它的右边是墙壁。但是如果我们把它放在空位上,那么是不是它就有了4种走法?也就是 东南西北。这个时候我们就有必要为方块的走法来制定一个接口,实现这一行为。下面的代码不提供分析,具体的代码分析参考: C++抽象编程——接口(2)——接口的用途
Direction.h
/*这个文件处理一些关于方位上的应用*/ #ifndef _direction_h#define _direction_h#include <string>/*声明枚举类型*/enum Direction { NORTH, EAST, SOUTH, WEST };/**函数: leftFrom*用法: Direction dir2 = leftFrom(Direction dir)*-------------------------------*在你原本的方位上向左转*/ Direction leftFrom(Direction dir);//返回类型是Direction/**函数: rightFrom*用法: Direction dir2 = rightFrom(Direction dir)*-------------------------------*在你原本的方位上向右转*/ Direction rightFrom(Direction dir);/**函数: directionToString*用法: string str = directionToString(Direction dir)*-------------------------------*将枚举类型转变为string类型,以便输出 */ std::string directionToString(Direction dir);#include "Directionpriv.h" #endif
Directionpriv.h
/**这部分内容为不希望用户看到的内容,虽然这个枚举类型不是类。也就意味着*没有私有成员,但是我们接口的目的就是为了隐藏程序的复杂性。只要是你觉*得不希望用户看到并且篡改,你都可以写一个文件用于隐藏,虽然不存在访问*的限制。C++中也是允许我们为枚举类型定义一些操作的*//*重载插入运算符,以便其能方便输出*/std::ostream & operator<<(std::ostream &os, Direction dir);/*重载++运算符(前)*/Direction operator++(Direction &dir);/*重载++运算符(后)*/Direction operator++(Direction &dir, int);//注意重载后缀运算符的时候,后面加int
Direction.cpp
#include <iostream>#include "Direction.h"using namespace std;/*实现左转*/ Direction leftFrom(Direction dir){ return Direction((dir + 3) % 4);//返回该类型的值 }/*实现右转*/ Direction rightFrom(Direction dir) { return Direction((dir + 1) % 4);}/*转变为string类输出*/ string directionToString(Direction dir) { switch(dir){ case NORTH: return "NORTH"; case EAST: return "EAST"; case SOUTH: return "SOUTH"; case WEST: return "WEST"; default: return "???"; }}/* << 运算符的重载 */ostream & operator<<(ostream &os, Direction dir){ return os << directionToString(dir);}/*++dir 重载*/Direction operator++(Direction &dir){ return Direction(dir + 1);} /* dir++ 重载*/Direction operator++(Direction &dir, int){ Direction old = dir; dir = Direction(dir + 1); return old;}
这里注意前缀跟后缀的区别。
测试代码
#include <iostream>#include "Direction.h"using namespace std;int main(){ for (Direction dir = NORTH; dir <= WEST; dir++){ cout << dir << endl; } return 0;}
测试结果:
0 0
- C++抽象编程——回溯算法(2)——准备Direction文件
- C++抽象编程——回溯算法(4)——回溯在游戏中的应用
- C++抽象编程——回溯算法(7)——极小化极大算法
- C++抽象编程——回溯算法(1)——迷宫问题
- C++抽象编程——回溯算法(3)——解决迷宫问题
- C++抽象编程——回溯算法(5)——Nim游戏代码及其反思
- C++抽象编程——回溯算法(6)——设计一般的双人游戏
- 算法——回溯
- 回溯——用蒙特卡洛算法估计回溯算法的效率
- 算法(一)——回溯法
- 算法——回溯法
- 经典算法——回溯
- 算法 —— 回溯法
- 算法系列—回溯法
- 回溯算法——算法总结(四)
- C++抽象编程——算法分析(2)——Big-O表示法
- C++抽象编程——算法分析(4)——合并排序算法
- C++抽象编程——算法分析(6)——快速排序算法
- 198. House Robber
- 推荐|前端开发者需要牢靠掌握的几项基本技能
- c++的覆盖和重载
- 【转】ng-if与ng-show区别以及ng-if会创建子作用域问题
- 三极管和MOS管工作原理详解
- C++抽象编程——回溯算法(2)——准备Direction文件
- Java 实例
- PAT 乙等 1021 个位数统计
- gcc常用命令选项
- cin深入分析(下) – cin的错误处理
- 杭电1078 FatMouse and Cheese DFS 记忆化搜索
- VR 发展进程
- hdu 6024 Building Shops (dp)
- hdu6023-Automatic Judge-2017中国大学生程序设计竞赛