- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设您有一个类树的基类 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/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!