我正在做一个命令应用程序,我有其他命令类继承的基类。
struct BaseCommand {
public:
virtual ~BaseCommand() {}
int id = 0;
std::string name = "Base Command";
std::string description = "Base Command";
BaseCommand();
virtual std::string getName();
virtual int getId();
virtual std::string getDescription();
private:
virtual void init();
virtual void run();
};
class HelpCommand: public BaseCommand {
public:
HelpCommand();
std::string name = "help";
std::string description = "output help";
int id = 1;
virtual std::string getName();
int getId() {return this->id;};
virtual std::string getDescription();
private:
virtual void init();
virtual void run();
};
class ProductCommand: public BaseCommand {
public:
ProductCommand();
std::string name = "prod";
std::string description = "product";
int id = 2;
virtual std::string getName();
int getId() {return this->id;};
virtual std::string getDescription();
private:
virtual void init();
virtual void run();
};
在我的main中,我把我的子类推到一个vector中,我的目标是通过它的名字得到这个命令,我怎么做呢,得到唯一的命令并把它赋给一个变量
std::vector<std::unique_ptr<BaseCommand>> commands;
// lett's push our commands...
commands.emplace_back(new HelpCommand);
commands.emplace_back(new ProductCommand);
std::string command = 'prod';
// what's the type should be for selectedCommand?
?? selectedCommand;
for (int i = 0; i < commands.size(); ++i) {
if (commands[i]->getName() == command) {
selectedCommand = commands[i];
}
}
我似乎不能确定selectedCommand
应该是哪种类型。请告诉我我错过了什么?
我似乎不能确定selectedCommand
应该是哪种类型。请告诉我我错过了什么?
1条答案
按热度按时间eit6fx6z1#
不能“覆盖”成员变量。
你的派生类有两个相同名称的成员变量;一个在基类中,一个在派生类中。
当您通过指向
BaseCommand
的指针访问对象时,将从BaseCommand
而不是从派生类获取成员。重新设计,使这些访问器仅为基的成员,并使访问器成为非虚拟的: