1.首先建立命令虛基類
.h
//基類虛函式
class command
; virtual ~command(void){};
public:
virtual void redo() = 0;
virtual void undo() = 0;
};
2.建立管理命令的類
.h
#include "command.h"
#include "vector"
using namespace std;
//命令管理類
class commandmanager
;
.cpp
#include "stdafx.h"
#include "commandmanager.h"
commandmanager::commandmanager(void)
commandmanager::~commandmanager(void)
void commandmanager::storecommand(command *cmd)
void commandmanager::clearallcommand()
} m_vecundo.clear();
}void commandmanager::clearredocommand()
} m_vecredo.clear();
}void commandmanager::releaseallcmd()
} m_vecredo.clear();
for (int i = 0; i < (int)m_vecundo.size(); ++i) }
m_vecundo.clear();
}
3.建立儲存命令基類
.h
#include "commandmanager.h"
class cmdhistorymanager :public commandmanager
return m_pcmdhistorymanager;
} static void releaseinstacne();
virtual void undo();
virtual void redo();
private:
static cmdhistorymanager *m_pcmdhistorymanager;
};
.cpp
#include "stdafx.h"
#include "cmdhistorymanager.h"
cmdhistorymanager * cmdhistorymanager::m_pcmdhistorymanager = null;
cmdhistorymanager::cmdhistorymanager(void)
cmdhistorymanager::~cmdhistorymanager(void)
void cmdhistorymanager::undo()
command *cmd = m_vecundo.at(m_vecundo.size() - 1);
cmd->undo();
m_vecundo.pop_back();
m_vecredo.push_back(cmd);
}void cmdhistorymanager::redo()
command *cmd = m_vecredo.at(m_vecredo.size() - 1);
cmd->redo();
m_vecredo.pop_back();
m_vecundo.push_back(cmd);
}void cmdhistorymanager::releaseinstacne()
}
基本類建立完畢;
下面就需要建立實際的命令基類 例如:cmycmd類
#include "command.h"
class cmycmd: public command
;
#include "mycmd.h"
cmycmd::cmycmd()
cmycmd:: cmycmd(int nmoveposbefore, int nmoveposafter)
cmycmd::~cmycmd()
void cmycmd::redo()
void cmycmd::undo()
void cmycmd::movepos(int npos)
建立類物件
cmycmd* pcmd = new cmycmd();
將建立好的類物件儲存到管理命令的類中
cmdhistorymanager::getinstance()->storecommand(pcmd);
撤銷操作
cmdhistorymanager::getinstance()->undo();
恢復操作
cmdhistorymanager::getinstance()->redo();
注意釋放:
cmdhistorymanager::getinstance()->releaseallcmd();
cmdhistorymanager::getinstance()->releaseinstacne();
Python下劃線命名模式
圖案例 含義單領先下劃線 var 指示名稱的命名約定供內部使用。通常不由python直譯器強制執行 萬用字元匯入除外 僅作為程式設計師的提示。單尾拖尾下劃線 var 按慣例使用以避免與python關鍵字命名衝突。雙重領先下劃線 var 在類上下文中使用時觸發名稱修改。由python直譯器強制執行。雙...
Django之URL的命名空間和命名模式
django之url的命名空間和命名模式 url template tag?polls urls.py from django.conf.urls import urlfrom import views polls urlpatterns url r views index name index u...
C 常用命名規範
指標應該應該緊靠資料型別 變數字首 類的成員m 靜態變數s 外部全域性變數g 靜態全域性變數sg 共享全域性變數gg 型別字首 bool b,char ch,int n,long l,float f,double d,指標 p,enum e,陣列 g 常量及巨集定義 全部大寫 作業系統風格 wind...