#include <iostream>
using namespace std;
class Base {
public:
virtual void some_func(int f1)
{
cout <<"Base is called: value is : " << f1 <<endl;
}
};
class Derived : public Base {
public:
virtual void some_func(float f1)
{
cout <<"Derived is called : value is : " << f1 <<endl;
}
};
int main()
{
int g =12;
float f1 = 23.5F;
Base *b2 = new Derived();
b2->some_func(g);
b2->some_func(f1);
return 0;
}
输出是:
Base is called: value is : 12
Base is called: value is : 23
为什么第二次调用 b2->some_func(f1)
调用 Base
类的函数,即使在 Derived 中有一个以 float 作为参数的版本可用
类?
最佳答案
- 它实际上并没有被覆盖,因为它的参数没有相同的类型。
- 因为它没有被覆盖,你指向
Base
的指针只知道int
方法,所以它执行收缩转换(应该有警告)并调用Base::some_func(int)
.
关于c++ - c++中的重写函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17488622/