c – 重载函数隐藏在派生类中
发布时间:2020-12-16 05:38:01 所属栏目:百科 来源:网络整理
导读:在派生类中如果我从Base类重新定义/重载一个函数名, 那么那些重载函数是不可访问的/可见的派生类. 为什么是这样?? 如果我们不从派生类中的基类重载oveloaded函数 那么该函数的所有重载版本都可用于派生类 对象,为什么是这样? 这是什么原因.如果您在编译器
在派生类中如果我从Base类重新定义/重载一个函数名,
那么那些重载函数是不可访问的/可见的派生类. 为什么是这样?? 如果我们不从派生类中的基类重载oveloaded函数 Edited For examble: class B { public: int f() {} int f(string s) {} }; class D : public B { public: int f(int) {} }; int main() { D d; d.f(1); //d.f(string); //hidden for D } Now object 'd' can't access f() and f(string). 解决方法
TTBOMK这没有真正的技术原因,只是Stroustrup在创建语言时,认为这是更好的默认值. (在这里,它类似于rvalue不会隐式绑定到非const引用的规则.)
您可以轻松地解决它明确地将基类版本引入派生类的范围: class base { public: void f(int); void g(int); }; class derived : public base { public: using base::f; void f(float); void g(float); // hides base::g }; 或通过明确调用: derived d; d.base::g(42); // explicitly call base class version (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |