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

标签 c++ inheritance polymorphism dynamic-binding

我有一个抽象类“Base”和派生类,例如 Hexadecimal、Binary 等等……。用户输入一个字符串,告诉我他当前使用的是什么基数,然后输入数字。我需要使用多态性(而不是 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...
}

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

最佳答案

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

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

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

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

关于c++ - 使用多态性根据用户输入调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48093887/

相关文章:

java - 对来自两个子类的对象的父类(super class)列表进行排序

C++11:按值调用、 move 语义和继承

c# - 使 Unity 解决考虑逆变的实现

haskell - 为什么在 Haskell 中没有推断出多态值?

c++ - 在 Qt 中更改标签

java - 将接口(interface)与类关联而无需访问源代码

c++ - 用 C/C++ 中的地址调用 lua 函数?

c++ - 理解 C++ 中的继承和多态性

c++ - 使用 std::initializer_list 的显式构造函数和初始化

c++ - C++如何输出两组不同的随机数?