【发布时间】:2023-03-14 01:19:02
【问题描述】:
我一直在 wikipedia (Name resolution WIKI) 中阅读有关“名称解析”的内容,并指出 C++ 使用“静态名称解析”。如果这是真的,那么我无法弄清楚 C++ 如何在不使用动态名称解析的情况下提供“多态性”。
谁能回答C++是使用“静态名称解析”还是“动态名称解析”。如果是静态的,能否也解释一下C++是如何提供多态性的。
【问题讨论】:
-
C++ 中所说的动态多态性都与关键字“virtual”有关。阅读有关它的更多信息。
-
两者都用。当您使用抽象类时,请使用动态。对于模板、重载等其他内容,它使用静态。
-
@EdwinRodríguez 我不认为 名称解析 在您使用抽象类时是动态的。名称在编译时解析。
-
为了澄清,任何人都可以指出以下段落中的错误。 C 和 D 是从 B 派生的类。B 具有虚函数 F 和 C,D 在其实现中覆盖了 F。 x 是指向 B 的指针,在我的应用程序中 x->F 可能是 B、C 或 D 的 F,具体取决于我将 x 指向的对象,我可以根据运行时的用户输入来执行此操作。如果 C++ 使用静态名称解析,则 x->F 必须仅与一个实体相关联,即在编译时与 B、C 或 D 的 F 相关联,并且不应在运行时更改。
-
"如果 C++ 使用静态名称解析,则 x->F 必须仅与一个实体关联,即与 B、C 或 D 中的 F" 不。这:"如果 C++ 使用静态名称解析然后有一些代码
x->F然后B::F在编译时必须存在(但可以是虚拟的)。”动态名称解析与动态调度(虚函数)100%无关