c++ - C++中的命令模式

标签 c++ pointers design-patterns command

所以我正在尝试学习 C++ 的命令模式,但我不确定如何绑定(bind)我的命令。 我当前的代码有我的输入处理程序和命令,但我不知道如何绑定(bind)它们。我不断得到 一个“错误:‘Command’是‘UpCommand’不可访问的基础”。

输入处理器.h

#ifndef INPUTHANDLER_H_INCLUDED
#define INPUTHANDLER_H_INCLUDED
#include "Command.h"

class InputHandler
{
public:
    void handleInput();

    //Bind Buttons Here

private:
    Command* buttonW;
    Command* buttonA;
    Command* buttonS;
    Command* buttonD;
};

#endif // INPUTHANDLER_H_INCLUDED

这是我的 Command.h

命令.h

#ifndef COMMAND_H_INCLUDED
#define COMMAND_H_INCLUDED
#include <iostream>

class Command
{
public:
    virtual ~Command() {}
    virtual void execute() = 0;
};

class UpCommand : Command
{
    virtual void execute() {std::cout << "UP";}
};

class DownCommand : Command
{
    virtual void execute() {std::cout << "DOWN";}
};

class LeftCommand : Command
{
    virtual void execute() {std::cout << "LEFT";}
};

class RightCommand : Command
{
    virtual void execute() {std::cout << "RIGHT";}
};

#endif // COMMAND_H_INCLUDED

我不知道如何将我在 InputHandler 中的指针绑定(bind)到 subCommands 以获得方向。谁能给我解释一下这是怎么做到的?

最佳答案

您需要使用公共(public)继承而不是私有(private)继承。将 class 更改为 struct 或说 class WTFCommand : public Command

这就是错误“基类不可访问”的含义。

关于c++ - C++中的命令模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26951298/

相关文章:

java - 交易成功后如何发送XMPP消息?

c++ - 使用 cmake 在项目属性(eclipse)中添加定义

c++ - 将 qmlRegisterType 与 Q_ENUM 和 typedef 枚举一起使用

c++ - “卸载”Python 模块和 'unbinding' 关联的 API

c++ - 为什么我的简单 Vector.cpp 没有链接? (从 C++ 开始)

string - 将字符串与指向字符串的指针作为函数的参数传递时,时间复杂度有何不同?

c++ - 打印一个结构指针和一个引用的结构成员

c - 指向字符数组指针的指针

design-patterns - 设计模式是你边走边发明的东西吗

php - 反转多对一层次结构