通过继承实现状态模式(C++)

注意:先做类的声明和抽象基类的声明

抽象基类的函数方法中引入类,具体方法在类的实现后面声明。

在抽象基类的子类的函数中可以调用类的成员函数。

cpp 复制代码
#include <iostream>


using namespace std;


class Contex;


class state {
public:
 virtual void Handel( Contex* contex) = 0;
};



class Contex {
public:
	
	Contex(state* _state) :State(_state) {};

	void changeState( state* _state)
	{
		State = _state;
	}

	void showState()
	{
		if (State != nullptr)
		{
			State->Handel(this);
		}
	}


	void showNum()
	{
		cout << num << endl;
	}
private:
	state *State = nullptr;
	int num = 10;

};




class state1 :public state {
public:
	void Handel(Contex* contex) {
		cout << "状态1" << endl;
	}
};

class state2 :public state {
public:
	void Handel(Contex* contex) {
		cout << "状态2" << endl;
	}
};


class state3 :public state {
public:
	void Handel(Contex* contex) {
		cout << "状态3" << endl;
		contex->showNum();
	}
};


int main()
{
	state *myState1 = new state1();
	state *myState2 = new state2();
	Contex *contex = new Contex(myState1);

	contex->showState();

	contex->changeState(myState2);

	contex->showState();

	state* myState3 = new state3();
	contex->changeState(myState3);
	contex->showState();


	return 0;
}
相关推荐
oort12314 分钟前
VLStream:全开源决策式AI视频平台,赋能企业构建自主可控、降本增效的智能视觉应用介绍
大数据·开发语言·人工智能·开源·音视频·数据库架构
王老师青少年编程27 分钟前
信奥赛C++提高组csp-s之搜索进阶(搜索剪枝案例实践2)
c++·信奥赛·csp-s·提高组·搜索剪枝·生日蛋糕·最优性剪枝
c++之路38 分钟前
C++ 设计模式全总结
java·c++·设计模式
c238561 小时前
c/c++中的多态(上)
开发语言·c++
彷徨而立1 小时前
【C++】介绍 std::ifstream 输入文件流
开发语言·c++
罗超驿1 小时前
13.JavaScript 新手入门指南:语法、变量、流程控制全解析
开发语言·javascript
MC皮蛋侠客1 小时前
C++17 多线程系列(十):多线程性能优化——从测量到调优
c++·多线程
yingjie1101 小时前
Scanpy vs Seurat 深度对比:Python 与 R 的单细胞分析框架谁更强?
开发语言·python·r语言·生物信息学·单细胞转录组·seurat·scanpy
程序大视界1 小时前
【C++ 从基础到项目实战】C++(六):拷贝控制——浅拷贝与深拷贝,兼谈智能指针
开发语言·c++·cpp
luck_bor1 小时前
IO流知识点笔记
java·开发语言·笔记