重写 C++ 中的函数

overriding functions in c++

本文关键字:函数 C++ 重写      更新时间:2023-10-16
#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 作为参数的版本?

  1. 它实际上并没有被覆盖,因为它的参数没有相同的类型。
  2. 由于它没有被覆盖,因此指向Base的指针只知道int方法,因此它会执行缩小转换(应该有警告(并调用Base::some_func(int)

您将重载与覆盖混淆了,对于覆盖,函数的签名必须保持不变。请再次查看 C++ 文档..希望这是有帮助的