0

在下面的代码中:
请告诉我为什么只调用派生类成员函数,是因为hiding?以及为什么没有出现错误b.func(1.1);,参数是int x

#include <bits/stdc++.h>

using namespace std;

class A {
public:
    virtual int func(float x)
    {
        cout << "A";
    }
};

class B : public A {
public:
    virtual int func(int x)
    {
        cout << "B";
    }
};

int main()
{
    B b;
    b.func(1);   // B
    b.func(1.1); // B

    return 0;
}
4

1 回答 1

5

是的,因为隐藏override这是您应该始终在要覆盖的函数上添加特殊标识符的主要原因之一:

class B : public A {
public:
    virtual int func(int x) override  // <- Note the override here
    {
        cout << "B";
    }
};

这将导致编译器抱怨实际上没有覆盖。

并且浮点值可以隐式转换为整数

于 2020-07-07T08:15:00.110 回答