撤消按关键字隐藏的名称"using"。在孙子班不工作
Undo name hiding by "using" keyword. Does not work in grandchild class
例如,在下面的程序中,我通过"using"关键字撤消名称隐藏。如果我有一个基类和一个派生类"我得到了预期的模糊调用错误"。但若我有两个派生类(child和grand-child),现在child和sund-child在这里有相同的重载函数,我也会通过"using"关键字撤消名称隐藏。但它正在被编译并得到输出。我的问题是,为什么我没有得到错误,因为"对重载函数的模糊调用"。
class baseNameHiding
{
protected:
int nameHidingexample(int t)
{
cout<<"im baseeeeeeeeeeee"<<endl;
return 0;
}
};
class derivedNameHiding:public baseNameHiding
{
public:
float nameHidingexample(float s)
{
cout<<"im derived"<<endl;
return 0;
}
using baseNameHiding::nameHidingexample;
};
class grandDerivedNameHiding:public derivedNameHiding
{
public:
float nameHidingexample(float f)
{
cout<<"im grand derived"<<endl;
return 0;
}
using baseNameHiding::nameHidingexample;
using derivedNameHiding::nameHidingexample;
};
int main()
{
char a;float f = 0.0;
derivedNameHiding derived;
derived.nameHidingexample(0);
grandDerivedNameHiding grandchild;
grandchild.nameHidingexample(f);
cin>>a;
}
//output
im baseeeeeeeeeeee
im grand derived
您遇到了使用声明的的特殊规则。C++14[命名空间.udcl]/15:
当using声明将基类中的名称带入中的派生类作用域、成员函数和成员函数模板派生类重写和/或隐藏成员函数和成员具有相同名称的函数模板,参数类型列表,cv限定符和基类中的ref限定符(如果有的话)(而不是冲突的)。[…]示例:
struct B { virtual void f(int); virtual void f(char); void g(int); void h(int); }; struct D : B { using B::f; void f(int); // OK: D::f(int) overrides B::f(int); using B::g; void g(char); // OK using B::h; void h(int); // OK: D::h(int) hides B::h(int) }; void k(D* p) { p->f(1); // calls D::f(int) p->f(’a’); // calls B::f(char) p->g(1); // calls B::g(int) p->g(’a’); // calls D::g(char) }
--结束示例]
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- "using namespace std;"在C++的作用是什么?
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- 撤消按关键字隐藏的名称"using"。在孙子班不工作
- Q_ENUMS和using声明不能一起工作
- 如何让" #using <System.DLL>"在Qt中工作?
- 使用using声明时,非限定名称查找是如何工作的