【问题标题】:Why is only derived class member function called?为什么只调用派生类成员函数?
【发布时间】:2020-10-27 10:44:58
【问题描述】:

在以下代码中:
请告诉我为什么只调用派生类成员函数,是因为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;
}

【问题讨论】:

    标签: c++ function inheritance overloading method-hiding


    【解决方案1】:

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

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

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

    还有floating point values can be implicitly converted to integers

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 2020-02-28
      • 2017-06-19
      • 1970-01-01
      • 2021-02-12
      • 2011-09-16
      • 2021-02-01
      相关资源
      最近更新 更多