❶ 请问如何用C++使用备忘录模式和命令模式实现undo redo
昨天正好实现了一个备忘录模式的示例
#ifndef _MEMENTO_H
#define _MEMENTO_H
#include <iostream>
#include <string>
using namespace std;
typedef string State;
class Memento
{
public:
~Memento();
private:
friend class Originator;
Memento(State s){
this->state = s;
}
void SetState(State s){
this->state = s;
}
State GetState(){
return state;
}
State state;
};
class Originator
{
public:
Originator(State s){
this->state = s;
}
void ChangeState(State s){
this->state = s;
}
Memento* CreateMemento(){
cout<<typeid(*this).name()<<": Create Memento..........."<<endl;
return new Memento(this->state);
}
void RestoreMemento(Memento* mem){
cout<<typeid(*this).name()<<": Restore Memento..........."<<endl;
this->state = mem->GetState();
}
void ShowState(string str){
cout<<str+"\n\tstate: "+state<<endl;
}
private:
State state;
};
class CareTaker
{
private:
Memento* mem;
public:
CareTaker():mem(NULL){}
void SaveMemento(Memento* m){
cout<<typeid(*this).name()<<": Save Memento..........."<<帆中endl;
mem = m;
}
Memento* GetMemento(){
return mem;
}
};
#endif //_MEMENTO_H
int main()
{
Originator *o = new Originator("start state.");
CareTaker *c = new CareTaker();
//show init state
o->ShowState("before change:");
//save state
c->SaveMemento(o->橡枝CreateMemento());
//change state
o->ChangeState("changed state.");
o->ShowState("after changed:");
//restore state
o->RestoreMemento(c->GetMemento());
o->ShowState("restored state:");
system("pause");
}
环境是vs2010,复制成两个文件,编译态如山就能运行。解释的话,就不用了吧。。。
❷ 用C语言写一下这个程序试下
假定你的c程序名字叫test.c 第一步:编辑,用linux最广泛使用的vi编辑器为例,shell下段槐友运行vi test.c进入vi编辑器环境,默认为命令模式,按i或I 或A进入插入模式,这样你可明梁以输入c源程序。输入完毕,检查后按Esc键返回命令模式,再握槐按 shift +
❸ 怎么在linux命令模式下创建以.C为结尾的文件或者将文件转换成.C结尾
1、创建.c的文件一般镇昌用命令:vi
*.c,
这样就可以御拆扒直接在vi下写自己的程序了
2、转换用两种方法:
方法1:如果你不想保留原来的文件了就用:mv
sourceFile
destinationFile
,这里的sourceFile指的是你想转换的文件,destinationFile指的是你要换成的名字,你想.c结尾就记得在文件名的后面加上.c就可以了;
方法御薯2:如果你想保留原来的文件了就用:cp
sourceFile
destinationFile
,(具体跟上面的命令差不多)。
❹ 微软C/C++编译器(调试器)怎么在命令行模式下调试程序
你说的GL命令加入调试信息。我也不太了解。
WINDOWS环境开发C/C++,应该有个IDE比较方便,效率高点。。。
如果JAVA不用IDE,还能提高些水平,多了解些东西。
但是我觉得C/C++实在没必要再没有集成开发环境的情况下做开发吧,
用VS2008最合适。
怀旧的用VC6,
激进的用VC2010,2012(win8)
开源的IDE也是有的,ECLIPSE。。。就支持很多语言的开发
补充:
你不想用IDE,你就首先声明咯,我也不知道你不想用IDE。
别人给你回答就尊重点,你自己问题没讲清楚,别擦擦擦的。
不过C++的命令行调试我确实不懂,用这东西实在划不来。
抱歉,帮不到你。
❺ linux vi如何进入命令模式
1、首先打开linux vi,进入到编辑页面中,
❻ C语言的命令行写在哪里啊
用鼠标点击屏幕左下角的开始-》运行,在运行对话框中输入“cmd”进入命睁亮令行模式,在命令行模式下进入你州早祥程序的当册搏前目录,然后在提示符后输入:程序名 空格 需要计算行数的那个文件名。这样你的程序在启动时就以那个文件名作为main函数的参数了。
❼ vi编辑器有3种基本工作模式
3种基本工作模式分别是:命令模式、文本输入模式和末行模式。下面详细介绍这3种模式:
命令行模式:该模式是进入vi编辑器后的默认模式。任何时候,不管用户处于何种模式,按下Esc键即可进入命令模式。在该模式下,用户可以输入 vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当作编辑命令来解释。若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不回显在屏幕上。若输入的字符不是vi的合法命令,vi会响铃报警。
文本输入模式:在命令模式下输入插入命令i、附加命令a、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想末行模式:末行模式也称ex转义模式。在命令模式下,用户按“:”键即可进入末行模式下,此时vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的说明符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,vi自动回到命令模式。如果要从命令模式转换到编辑模式,可以键入命令a或者i。如果需要从文本模式返回,则按 Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。
末行模式:末行模式也称ex转义模式。在命令模式下,用户按“:”键即可进入末行模式下,此时vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的说明符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,vi自动回到命令模式。如果要从命令模式转换到编辑模式,可以键入命令a或者i。如果需要从文本模式返回,则按 Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。
❽ 在VC++中为什么C程序运行后答案一闪而过来不及看清
先解释一下为什么一闪而过:
当你山敏在vc++里运行程序,vc++将会调用行命令模乎培式(即command.com程序),打开你的程序。当程序执行完毕后将自动退出行命令模式。岁唯唯所以你来不及看你的程序的输出。
要解决这个问题,最简单的方案就是在你的代码的最后,return
0;之前,加上
getchar();
//getch()似乎不是ANSI
C的一部分
这个语句将使得你的程序做最后一件事情:从输入缓冲区(输入流stdin)中读一个字符。也就是说在你的其他程序结束后,还要敲一下回车才会结束所有程序。
但是,要注意的是:当程序快结束时,如果你的输入缓冲区中已经有字符了,c语言将直接从缓冲区中读取一个字符,然后结束程序。而不等待你的输入。
比如:
#include<stdio.h>
int
main(void)
{
putchar(getchar());
//你的程序只有这么一句,作用是输入一个字符,然后计算机将它输出
getchar();//这是你为了防止一闪而过而加的语句
return
0;
}
这个程序结束时将仍然一闪而过。原因在于第一条getchar()表达式执行的时候,将返回你输入的第一个字符,后面的字符(包括回车字符'\n')留在了缓冲区。要解决这类问题,得随机应变,没有统一的解决方案。在这个例子中,可以这样:
#include<stdio.h>
int
main(void)
{
putchar(getchar());
//你的程序只有这么一句,作用是输入一个字符,然后计算机将它输出
while(getchar()!='\n')
continue;//这个循环将把输入缓冲区的内容清掉,一直清到换行符。
getchar();//这是你为了防止一闪而过而加的语句
return
0;
}
复杂一点的解决方案是,不要在visual
c++中执行。你先生成可执行文件,然后打开行命令模式(运行->cmd),然后在那里运行你的程序,就不会自动退出了。
sorry,刚才试了一下,ctrl+f5确实可以,parason说的很对。
本想不发了,但是写了半天,不发也可惜,况且,从我写的这些,你可以更加理解一些原理性的东西。而且,我写的是一个通用的办法,即使不是visual
c++也可以用。
不过最佳答案千万别选我,因为我的答案和parason的比起来确实很愚蠢。