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

Including the Abstract Class or Polymorphic Class C++

本文关键字:C++ 多态 抽象类 包括      更新时间:2023-10-16

我已经计划了很长一段时间的实验室项目,因为我喜欢在真正进入代码之前这样做,我偶然发现了一个问题,我不太确定如何在网上找到答案。

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

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

我的问题是,当传递从抽象类派生的命令时,我是否必须导入/包含从抽象类衍生的每个命令才能像。。。

Command Abstract Class
AddInput Derived Class (from above)
AddInput input = new Command()

我的终极问题是。。。

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

首先,如果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和一些派生的实现。ICommandcmdintfs.h中声明,并且所有命令实现源都应该包括该报头。当您通过多态ICommand接口使用命令时,您将只能访问它所描述的方法(在我们的示例中为ExecuteUndo)。所有其他具体实施都将被隐藏。