函数隐藏在c++中



我尝试了一些在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;
}

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

否。只会选择并调用一个函数。那么问题是应该选择哪一个。在这种情况下,选择derived::fun;因为对于使用声明,

如果派生类已经有一个具有相同名称、参数列表和资格的成员,则派生类成员将隐藏或重写(与基类引入的成员不冲突(。

您可以通过显式指定来调用基:

d.base::fun(10);

实时

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

你认为为什么应该这样做?存在单个函数调用,所以理论上它应该是derived::funbase::fun,而不是两者都是。由于d的类型为derived,因此调用derived::fun

最新更新