包括抽象类或多态类C++
Including the Abstract Class or Polymorphic Class C++
我已经计划了很长一段时间的实验室项目,因为我喜欢在真正进入代码之前这样做,我偶然发现了一个问题,我不太确定如何在网上找到答案。
我目前的任务是编写一个非常基本的文本编辑器,我的教授给了我们一个基本的用户界面。
我们要做的是。。。-创建从抽象类派生的命令对象-这些命令对象具有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
和一些派生的实现。ICommand
在cmdintfs.h
中声明,并且所有命令实现源都应该包括该报头。当您通过多态ICommand
接口使用命令时,您将只能访问它所描述的方法(在我们的示例中为Execute
和Undo
)。所有其他具体实施都将被隐藏。
相关文章:
- 多态性和功能结合
- 具有默认模板参数的多态类的模板推导失败
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 多态二进制函数
- 访问存储在向量C++中的结构的多态成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 将 std::allocate_shared 与多态资源分配器一起使用
- 通过switch和static_cast访问多态对象的运行时类型
- C++boost序列化多态性问题
- 多态杆件变量 - 类设计
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- Doees the 'this' 指针参与虚函数的多态行为
- C++ 在堆栈中包含多态属性的类对象存储
- 基类和派生类的多态赋值运算符
- 转身多态对象
- 如何在基类指针向量的元素上应用重载的多态函数
- 具有智能指针的多态性
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- C++事件系统 - 多态事件和事件处理程序