gpt4 book ai didi

c++ - 抽象类 C++ 中的变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:48 25 4
gpt4 key购买 nike

我有一个抽象类 CommandPath,以及一些派生类如下:

class CommandPath {
public:
virtual CommandResponse handleCommand(std::string) = 0;
virtual CommandResponse execute() = 0;
virtual ~CommandPath() {}
};

class GetTimeCommandPath : public CommandPath {
int stage;
public:
GetTimeCommandPath() : stage(0) {}
CommandResponse handleCommand(std::string);
CommandResponse execute();
};

所有派生类都有成员变量'stage'。我想在所有这些函数中构建一个以相同方式操作“阶段”的函数,所以与其多次定义它,不如将其构建到父类中。我将“阶段”从所有派生类的私有(private)部分移动到 CommandPath 的 protected 部分,并添加如下函数:

class CommandPath {
protected:
int stage;
public:
virtual CommandResponse handleCommand(std::string) = 0;
virtual CommandResponse execute() = 0;
std::string confirmCommand(std::string, int, int, std::string, std::string);
virtual ~CommandPath() {}
};

class GetTimeCommandPath : public CommandPath {
public:
GetTimeCommandPath() : stage(0) {}
CommandResponse handleCommand(std::string);
CommandResponse execute();
};

现在我的编译器告诉我构造函数行,派生类都没有成员“stage”。我的印象是 protected 成员对派生类可见?

构造函数在所有类中都是相同的,所以我想我可以将它移到父类中,但我更关心的是找出派生类无法访问该变量的原因。

此外,由于之前我只将父类用于纯虚函数,我想确认这是添加一个由所有派生类继承的函数的方法。

最佳答案

试试这个:

class CommandPath {
protected:
int stage;
public:
CommandPath(int stage_) : stage(stage_) {}
};

class GetTimeCommandPath : public CommandPath {
public:
GetTimeCommandPath(int stage_) : CommandPath(stage_) {}
};

(为简洁起见省略了额外的代码)。

您不能在父类的成员上使用初始化列表,只能在当前的成员上使用。如果这是有道理的话。

关于c++ - 抽象类 C++ 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2843478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com