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

时间:2018-01-04 11:05:39

标签: c++ inheritance polymorphism dynamic-binding

我有一个抽象的课程" Base"和十六进制,二进制等派生类....用户输入一个字符串,告诉我他目前使用的是什么基数并输入数字。我需要使用多态(而不是控制语句,如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...
}

我可以确定我当前的数字基数,但是如何在运行时动态创建例如二进制类?我甚至不确定我是否需要抽象类Base ... 我不知道我是否朝着正确的方向前进......这是一个继承+多态分配,这就是我需要用这些功能来解决它​​的原因。

1 个答案:

答案 0 :(得分:1)

我认为你应该研究工厂方法模式。这将返回指向基类的指针,您将能够调用toDec方法。

通常工厂方法会要求你使用一些switch语句,但是如果你不想不惜一切代价这样做,那么看看如何在不使用if或者切换的情况下实现工厂:

https://stackoverflow.com/a/3502010/8855783

只有当每个派生类(来自Base)的construcor需要相同的参数

时,这才有效