У меня есть абстрактный класс 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". Я хочу встроить функцию во все из них, которая одинаково манипулирует «стадией», поэтому вместо того, чтобы определять ее много раз, я решила встроить ее в родительский класс. Я переместил «stage» из закрытых разделов всех производных классов в защищенный раздел CommandPath и добавил функцию следующим образом:
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". У меня сложилось впечатление, что защищенные члены видны производным классам?
Конструктор одинаков во всех классах, поэтому я полагаю, что могу переместить его в родительский класс, но меня больше беспокоит выяснение, почему производные классы не могут получить доступ к переменной.
Кроме того, поскольку ранее я использовал родительский класс только для чисто виртуальных функций, я хотел подтвердить, что это способ добавления функции, которая наследуется всеми производными классами.