Xle*_*lea 2 c++ casting explicit
假设A
源自B
. B *x = new A()
例如,是否有一种方法可以通过进行必要的显式强制转换来禁止像 中那样的隐式向上强制转换?
没有办法完全阻止这种转换。
您可以在大多数地方(但不是在 的友元或成员中A
)使用私有继承,或者通过用包含或聚合关系替换继承(其中A
包含 的实例或指向 的指针/引用B
,而不是继承)来阻止它。然后成员函数可以模拟显式强制转换:
B * x = new A(); // not allowed
A * a = new A(); // OK
B * b = a->to_B(); // OK
Run Code Online (Sandbox Code Playgroud)
但你应该考虑一下你真正想要阻止什么行为,而不是让一个完全正常的操作需要跳过一个相当奇怪的圈子。几乎肯定有更好的方法来解决您的具体问题。
归档时间: |
|
查看次数: |
1335 次 |
最近记录: |