假设 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/