使用多态性根据用户输入调用函数

Using Polymorphism to call a function depending on user input

我有一个抽象的 class "Base" 和派生的 classes,例如十六进制、二进制等等...。用户输入一个字符串,告诉我他当前使用的是什么基数,然后输入数字。我需要使用多态性(而不是 if、switch 等控制语句)来创建所需的对象,或者至少将该数字更改为十进制,以便我可以使用我收到的不同基数的不同数字进行所需的计算来自用户。 我尝试了很多但无法找到如何做到这一点。我目前的想法是动态调用 "double toDec(const Base&)" 函数,但不认为这是正确的举动:

#include <iostream>
#include <string>
using namespace std;

class Base
{
public:
    Base(string n, string b) : number(n), base(b) {}
    virtual string whatBaseAreYou(string) = 0;
    virtual double toDec(const Base&) { whatBaseAreYou(base); }  
protected:
    string number;
    string base;
};

class Hex : public Base
{
public:
    virtual double toDec(const Base&);
};

class Binary : public Base
{
public:
    virtual double toDec(const Base&);
};

int main()
{
    string number,base;
    cin >> number >> base;
    Base* b = new Base(number,base); //I know this line is compile error.. I don't know how to implement this...
}

我可以确定我当前数字的基数,但是如何在 运行 时间内动态创建二进制 class 等?我什至不确定我是否需要抽象 class 基础... 我不知道我是否在朝着正确的方向前进...这是一个继承 + 多态性分配,这就是为什么我需要用这些特性来解决它。

我认为你应该研究一下工厂方法模式。这将 return 你指向你的基础 class 并且你将能够调用 toDec 方法。

通常工厂方法会要求您使用一些 switch 语句,但如果您不惜一切代价不想这样做,请在此处查看如何在不使用 if 或 switches 的情况下实现工厂:

只有当每个派生的 class(来自 Base)的构造函数需要相同的参数时,这才会起作用