【问题标题】:Function hiding in c++隐藏在 C++ 中的函数
【发布时间】:2020-08-24 20:19:20
【问题描述】:

我尝试了 C++ 中函数隐藏的几个概念。 所以在派生类中,我使用范围解析运算符using base::fun 来提供派生类中基类的范围。我的目标是打印cout<<" base "<< x;,但输出只打印派生类cout。有什么原因以及如何解决?即它应该打印基类和派生类的值。我是c++新手,如有错误请见谅。代码如下:

#include <stdio.h>
#include <iostream>
using namespace std;

class base
{
public:
int fun(int x)
{
    cout<<" base "<< x;
    return x;
}
};
class derived:public base
{
public:
using base::fun;
void fun(int a)
{
    cout<<" derived "<< a;
}
};

int main()
{
    derived d;
    d.fun(10);
    return 0;
}

【问题讨论】:

    标签: c++ function using-declaration name-hiding


    【解决方案1】:

    它应该打印基类和派生类的值

    没有。只会选择和调用一个函数。那么问题是应该选择哪一个。在这种情况下,derived::fun 被选中;因为对于using declaration

    如果派生类已经有一个具有相同名称、参数列表和限定条件的成员,则派生类成员隐藏或覆盖(不冲突)从基类引入的成员。

    您可以通过明确指定来调用基类:

    d.base::fun(10);
    

    LIVE

    【讨论】:

      【解决方案2】:

      它应该打印基类和派生类的值

      为什么你认为它应该?有一个函数调用, 所以理论上,它应该是derived::funbase::fun,而不是两者。因为dderived 类型,所以derived::fun 被调用。

      【讨论】:

        猜你喜欢
        • 2013-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-07
        • 2011-05-23
        • 1970-01-01
        • 2010-12-08
        相关资源
        最近更新 更多