2

我正在尝试一些隐藏在 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;
}
4

2 回答 2

2

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

为什么你认为应该?有一个函数调用,所以理论上,它应该是derived::funor base::fun,而不是两者。由于dis 类型derivedthenderived::fun被调用。

于 2020-05-09T07:52:40.077 回答
2

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

不会。只会选择和调用一个函数。那么问题是应该选择哪一个。在这种情况下derived::fun被选中;因为使用声明

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

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

d.base::fun(10);

居住

于 2020-05-09T07:58:30.520 回答