gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:51:37 25 4
gpt4 key购买 nike

我有一个抽象类“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com