A::DoSomething()` 在此 C 代码中而不是 `b->DoSomething()` ? " />
C 重载解析
在给定的代码示例中,编译器要求显式使用 b->A::DoSomething() 而不是 b ->DoSomething() 由于“重载解析”的概念。
重载解析根据参数的类型和数量确定调用哪个函数重载。在这种情况下,编译器会考虑 DoSomething( 方法)。 ) 首先在类 B 的范围内。由于 B 中存在具有相同名称和参数的方法,因此编译器会尝试解析 B 中的重载。
但是,A 中的方法 DoSomething() 是也是一个有效的重载。要显式访问此重载,可以使用范围运算符 :: 来指定 DoSomething() 方法属于基类 A。
避免此问题的一个可能的解决方案是“使用 using 关键字将重载从 A 下拉到 B 的范围内。这实际上允许直接在 B 内访问 A::DoSomething() 。下面是一个示例:
<code class="cpp">class B : public A { public: using A::DoSomething; // Additional methods or members };</code>
现在,在范围内B 的方法 DoSomething() 可以在没有 A:: 前缀的情况下调用,因为由于 using 指令,它被认为是 B 中的重载。
以上是为什么编译器在此 C 代码中需要 `b->A::DoSomething()` 而不是 `b->DoSomething()`?的详细内容。更多信息请关注PHP中文网其他相关文章!