gpt4 book ai didi

c++ - 重载函数隐藏在派生类中

转载 作者:IT老高 更新时间:2023-10-28 22:36:38 26 4
gpt4 key购买 nike

在派生类中如果我从基类重新定义/重载函数名称,
那么那些重载的函数对于派生类是不可访问/可见的。
为什么是这样??

如果我们不在派生类中从基类重载重载函数那么该函数的所有重载版本都可用于派生类
对象,这是为什么呢??
这背后的原因是什么。如果你在编译器和链接器级别解释这个
这对我会更有帮助。这种scinario不支持吗??

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 在创建语言时认为这是更好的默认设置。 (这类似于右值不会隐式绑定(bind)到非 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

关于c++ - 重载函数隐藏在派生类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3202234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com