c++ - 在 C++ 中是否可以强制显式向上转换

标签 c++ casting explicit

假设 A 派生自 B。例如,是否有一种方法可以通过显式转换来禁止像 B *x = new A() 中那样的隐式向上转换?

最佳答案

没有办法完全阻止这种转换。

您可以在大多数地方(但不是在 A 的 friend 或成员中)使用私有(private)继承,或者用包含或聚合关系替换继承(其中 A > 包含 B 的实例或指针/引用,而不是继承)。然后一个成员函数可以模拟显式转换:

B * x = new A();   // not allowed
A * a = new A();   // OK
B * b = a->to_B(); // OK

但是您应该考虑您真正想要阻止的行为是什么,而不是让一个完全正常的操作需要跳过一个相当奇怪的圈套。几乎肯定有更好的方法来解决您的特定问题。

关于c++ - 在 C++ 中是否可以强制显式向上转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29214624/

相关文章:

c++局部变量被覆盖(但仅在某些笔记本上)

c++ - '_nextafter' 未声明 : CGAL in Qt Creator with Windows 8. 1

android - 尽管已正确保存,但文件没有出现在 SD 卡上;出现在设备上的文件资源管理器中

c# - 如何将 object[] 转换为更具体类型的数组

将字符串转换为 unsigned long int

java - 我可以在 Java 中重命名已实现的方法吗?

c++ - 延迟评估和/或灵活的宏名称

Java调用枚举的静态方法,该方法作为类类型变量传递而无需强制转换

c++ - 在常规类中声明模板的显式特化实例

c++ - 什么时候加载 DLL : Implicit Linking VS Explicit Linking