gpt4 book ai didi

c++ - 如何强制所有派生类实现虚方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:00 26 4
gpt4 key购买 nike

假设您有一个类树的基类 Dep。有一个虚拟方法 Dep* Dep::create() 我希望每个叶类都实现它。有什么办法可以强制执行此操作吗?

注意:这里的问题是可能有中间类(比如 class B : public A : public Dep)通过以下方式实现此方法 (A::create)意外或因为他们认为他们是叶类,但实际上他们自己是子类。

问题到此结束。

上下文

如果你好奇我为什么需要这个;我有一个 Master 类,它具有未知具体类型的 Dep 对象。如果 Master 是重复的,我需要拿出 Dep 实例的匹配克隆。下一个最好的办法是虚拟构造函数惯用语,它恰好引入了这个问题。

此外,我什至无法捕捉到这一点(除了可怕的崩溃),因为由于一些不明原因,比我更有发言权的人在这个项目中禁止了 dynamic_cast(也许这是一个好的决定;但无论如何是一个完全不同的讨论)。

最佳答案

C++ 无法阻止类从您的类继承,也无法使继承层次结构中的特定类实现方法。唯一的规则是,在特定类之上的继承层次结构中的某处(不一定在叶中),所有虚函数都必须具有该类的可实例化实现。

例如,A 可以继承自Def 并实现它的所有[纯] 虚方法。那么如果 B 继承自 A,它就不需要实现任何东西。没有办法阻止这种情况发生。

所以答案是否定的,没有办法强制执行。

关于c++ - 如何强制所有派生类实现虚方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7288752/

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