首页 > 后端开发 > C++ > 为什么在 C 中从父类调用方法时需要使用 `b->A::DoSomething()` 而不是 `b->DoSomething()` ?

为什么在 C 中从父类调用方法时需要使用 `b->A::DoSomething()` 而不是 `b->DoSomething()` ?

DDD
发布: 2024-11-03 08:30:29
原创
689 人浏览过

Why do I need to use `b->在 C 中从父类调用方法时,A::DoSomething()` 而不是 `b->DoSomething()` ? 
在 C 中从父类调用方法时,“ />A::DoSomething()` 而不是 `b->DoSomething()` ?

作用域冲突的 C 重载解析

提供的代码片段说明了当不同作用域中存在两个同名方法时,C 重载解析中的常见挑战在这种情况下,编译器依赖范围可见性规则来确定适用的方法。

问题:

在类 B 的实例上调用 DoSomething 方法时,为什么需要显式使用 b->A::DoSomething() 而不是简单地使用 b->DoSomething()?

答案:

The编译器默认考虑尽可能小的名称范围,在这种情况下,它只识别类 B 中定义的 DoSomething 方法。由于参数列表与该方法的签名不匹配,编译器会发出错误。

To要解决此范围问题,有两种方法:

显式范围解析:

使用语法 b->A: 显式指定所需方法的范围: DoSomething(),强制编译器识别类 A 中定义的方法。

继承作用域:

使用 using 指令将所需的方法带入作用域的派生类。例如:

<code class="cpp">class B : public A {
public:
    using A::DoSomething;
    // ...
}</code>
登录后复制

通过使用这些方法之一,您可以确保编译器正确解析重载并调用预期的 DoSomething 方法。

以上是为什么在 C 中从父类调用方法时需要使用 `b->A::DoSomething()` 而不是 `b->DoSomething()` ?的详细内容。更多信息请关注PHP中文网其他相关文章!

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