您好,登錄后才能下訂單哦!
在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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。