包括抽象类或多态类C ++

时间:2015-12-04 05:27:25

标签: c++ class polymorphism

我一直在计划我的实验室项目已经有一段时间了,因为我喜欢在实际跳转到代码之前这样做并偶然发现了一个问题,我不太确定如何在网上找到答案。< / p>

我目前的任务是编写一个非常基本的文本编辑器,我的教授给了我们一个基本的用户界面。

我们要做的是...... - 创建从抽象类派生的命令对象 - 这些命令对象具有执行和撤消方法 - 每个命令将控制简单的操作,如添加输入,撤消输入或删除行

我遇到的问题是,当传递从抽象类派生的命令时,我是否必须导入/包含我从抽象类派生的每个命令才能使用...

Command Abstract Class
AddInput Derived Class (from above)

AddInput input = new Command()

我的最终问题是......

  • 我是否必须从抽象的
  • 中导入我使用的每个类
  • 命令AddInput = new AddInput()会按我认为的方式工作吗?我知道它在C ++中是合法的,但是它会从AddInput类中返回所有成员变量吗?

1 个答案:

答案 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接口使用命令时,您将只能访问它描述的方法(在我们的示例中为ExecuteUndo)。将隐藏所有其他特定实现。