您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
在C++中设计一个控件状态机,我们可以使用类和继承来实现
#include<iostream>
#include<string>
// 基类 ControlState
class ControlState {
public:
virtual void handle(Control& control) = 0;
};
// 具体状态类:ActiveState
class ActiveState : public ControlState {
public:
void handle(Control& control) override {
std::cout << "Control is already active."<< std::endl;
}
};
// 具体状态类:InactiveState
class InactiveState : public ControlState {
public:
void handle(Control& control) override {
std::cout << "Activating control..."<< std::endl;
control.set_state(new ActiveState());
}
};
// Control 类
class Control {
public:
Control() : state_(new InactiveState()) {}
void set_state(ControlState* state) {
delete state_;
state_ = state;
}
void handle() {
state_->handle(*this);
}
private:
ControlState* state_;
};
int main() {
Control control;
control.handle(); // 输出:Activating control...
control.handle(); // 输出:Control is already active.
return 0;
}
在这个例子中,我们定义了一个基类ControlState
,它有一个纯虚函数handle()
。然后我们创建了两个具体状态类ActiveState
和InactiveState
,它们分别继承自ControlState
并实现handle()
方法。
Control
类包含一个ControlState
指针,用于存储当前状态。我们还为Control
类提供了一个set_state()
方法,用于设置新的状态。Control
类的handle()
方法调用当前状态的handle()
方法。
在main()
函数中,我们创建了一个Control
对象,并连续调用了两次handle()
方法。第一次调用时,控件处于非活动状态,因此会激活它并输出“Activating control…”。第二次调用时,控件已经处于活动状态,因此不会有任何操作,只会输出“Control is already active.”。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。