提问人:Tanishq Kohli 提问时间:6/21/2023 最后编辑:Tanishq Kohli 更新时间:6/21/2023 访问量:62
如何调用基类的函数来显示运行时多态性?
How do I call the function of the base class to show runtime polymorphism?
问:
有一个类 Base,它有一个函数 add,它输入用户的整数并打印它们的总和。还有另一个名为 Derived 的类,它公开继承了 Base 类,它也有一个函数 add,但它将实数作为输入(基本上是浮点数)并打印它们的总和。
现在,我想要的是让用户输入 2 个数字和代码,以便使用运行时多态性根据输入类型自动知道要调用哪个函数。
例如。如果我给出输入 2 和 3,它应该打印 5,然后“在基类中”,如果我给出输入为 3.5 和 2.5,它应该打印 6.0 和“在派生类中”。
我在代码中面临的问题是,即使我将输入指定为 2 和 3,它也会调用派生类的函数,因为它将整数输入隐式转换为浮点数。
这是我的代码:
#include <iostream>
using namespace std;
class Base {
public:
virtual void add() {
int a, b, c;
cin >> a >> b;
c = a + b;
cout << c << endl;
cout << "base" << endl;
}
};
class Derived : public Base {
public:
void add() {
float a, b, c;
cin >> a >> b;
c = a + b;
cout << c << endl;
cout << "derived" << endl;
}
};
int main() {
Base* ptr;
Derived d;
ptr = &d;
ptr->add();
return 0;
}
我尝试正常操作,也尝试使用虚拟,但无济于事。
编辑:
这是整个问题: 使用运行时多态性的概念执行两个数字的加法。在这里,您必须创建一个 Base 类和 Derived 类。Derived 类应派生自 Base 类,并且这两个类都将包含一个 add() 函数。在基类中,add() 函数用于添加两个整数,在派生类中,add() 函数用于添加两个实数。最后,实数加法将显示为输出。
看起来这只是一个愚蠢的问题
答:
现在,我想要的是让用户输入 2 个数字和代码,以便使用运行时多态性根据输入类型自动知道要调用哪个函数。
这不是多态性的工作方式。简而言之,虚拟调度:
ptr->add();
ptr
是指向 的指针。 是虚拟的,因此对象的动态类型决定了调用哪个方法。对象的类型为 ,因此被调用。Base
Base::add
Derived
Derived::add
这就是决定调用什么方法的方式。调用后,它不会根据某些用户输入自动替换为其他方法。
此外,如果您用于读取整数,则结果将始终存储在该整数中:std::cin
int a, b, c;
cin >> a >> b;
进入,不会自动变成s。同样地2.0
3.0
a
b
float
float a,b,c;
cin >> a >> b;
如果输入 ,则输入 和 中存储的值是浮点数。变量的类型不会根据用户输入而自动更改。1
2
a
b
评论
Derived::add
"derived"
ptr->add()
Derived::add
ptr
Derived
add
评论
add
Derived
add
add
Base::add
Derived::add