首页 > 后端开发 > C++ > 如何解决 C 继承中的函数名称冲突?

如何解决 C 继承中的函数名称冲突?

Patricia Arquette
发布: 2024-12-21 16:02:10
原创
938 人浏览过

How Can I Resolve Function Name Collision in C   Inheritance?

派生类中的函数冲突

在基类及其派生类中定义具有相同名称但不同签名的函数时,可能会出现名称查找问题。

请考虑以下事项code:

class A
{
public:
    void foo(string s){};
};

class B : public A
{
public:
    int foo(int i){};
};

class C : public B
{
public:
    void bar()
    {
        string s;
        foo(s);
    }
};
登录后复制

在此示例中,编译器在尝试从类 C 的 bar() 函数内的基类 A 访问 foo() 函数时会引发错误。这是因为名称查找优先考虑查找最直接的类(在本例中为 B)中的函数,并忽略 A 中的重写函数。

要解决此问题,派生类 B 必须显式声明重写的函数使用 using 指令的函数:

class B : public A
{
public:
    int foo(int i){};
    using A::foo;
};
登录后复制

通过使用 using 指令,B 有效地将 A 中的 foo() 函数重新引入到自己的作用域中,使其对 C 等后续派生类可见。

以上是如何解决 C 继承中的函数名称冲突?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板