【发布时间】:2014-03-31 19:06:27
【问题描述】:
我了解从基类派生时使用 virtual 关键字的要求,以避免与菱形继承相关的歧义问题。
但是,我的问题是为什么在派生类时这不是 C++ 中的默认行为,无论是否存在钻石问题?
在不存在钻石继承的情况下使用“虚拟”关键字是否有任何“危害”?
【问题讨论】:
-
使用
virtual关键字会造成菱形继承,但这是不受欢迎的。考虑一个银行账户,它是一个“DollarPaymentEndpoint”和一个“YenPaymentEndpoint”,其中每一个都继承自具有“AmountReceived”成员的“PaymentEndpoint”。 -
Why is the virtual keyword needed? 讨论了为什么
virtual不是自动的。 -
@DavidSchwartz 我的错误。默认情况下具有虚拟继承会创建意外共享并破坏封装。它还可以防止类成为 POD。
-
@RaymondChen:虽然答案非常相似,但我认为其他问题是关于虚拟成员函数的,而这个问题是关于虚拟继承的。
-
虚拟继承不会避免钻石,它创建钻石。
标签: c++ inheritance virtual multiple-inheritance diamond-problem