我一直在计划我的实验室项目已经有一段时间了,因为我喜欢在实际跳转到代码之前这样做并偶然发现了一个问题,我不太确定如何在网上找到答案。< / p>
我目前的任务是编写一个非常基本的文本编辑器,我的教授给了我们一个基本的用户界面。
我们要做的是...... - 创建从抽象类派生的命令对象 - 这些命令对象具有执行和撤消方法 - 每个命令将控制简单的操作,如添加输入,撤消输入或删除行
我遇到的问题是,当传递从抽象类派生的命令时,我是否必须导入/包含我从抽象类派生的每个命令才能使用...
Command Abstract Class
AddInput Derived Class (from above)
AddInput input = new Command()
我的最终问题是......
答案 0 :(得分:0)
首先,如果Command
是抽象类(或者您喜欢的接口),则无法创建它的实例,因此代码Command cmd = ...
不正确。你只能使用它的指针。让我们考虑一些简单的例子:
//cmdintfs.h
class ICommand
{
public:
virtual bool Execute() = 0;
virtual bool Undo() = 0;
virtual ~ICommand() {};
};
#include "cmdintfs.h"
class CDoSmthCommand : public ICommand
{
public: //some cmd implementation
};
class CDoOtherThingsCommand : public ICommand
{
public: //some cmd implementation
};
//...
ICommand *pCmd = new CDoOtherThingsCommand();
pCmd->Execute();
这里我们有一个接口ICommand
和一些派生的实现。 ICommand
中声明cmdintfs.h
,所有命令实现源都应包含该标头。当您通过多态ICommand
接口使用命令时,您将只能访问它描述的方法(在我们的示例中为Execute
和Undo
)。将隐藏所有其他特定实现。