在比较C++和Java多重继承时,我有一些疑问。
将不胜感激。谢谢!!
发布于 2010-08-23 06:20:20
1) Java接口没有属性。在c++中使用虚拟基类的原因之一是防止重复属性以及与此相关的所有困难。
2)在c++中使用虚拟基类至少会造成轻微的性能损失。此外,构造函数变得如此复杂,因此建议虚拟基类只有无参数构造函数。
( 3)正是因为c++的哲学:一个人不应该要求对一个人可能不需要的东西进行惩罚。
发布于 2010-08-23 06:29:44
。
发布于 2010-08-23 09:44:40
1.接口中的Java多重继承行为与C++中的虚拟继承最为相似。更准确地说,要在c++中实现类似java的继承模型,您需要使用c++虚拟基类。
然而,c++虚拟继承(小内存和性能损失除外)的缺点之一是static_cast<>无法从基到派生,因此需要使用rtti (dynamic_cast) (或者如果预先知道子类的列表,可以为子类提供手工制作的虚拟转换功能)。
2.如果在继承列表中忘记了“虚拟”限定符,这通常会导致编译器错误,因为从任何驱动到基类的转换都会产生矛盾。
3.哲学问题通常难以回答.c++是一种多范式(多哲学)语言,不强加任何哲学决定。您可以在您自己的项目中尽可能使用虚拟继承,并且(您很成熟)它有一个很好的理由。但是这样的极大值对于其他人来说可能是不可接受的,所以通用的c++工具(标准和其他广泛使用的库)应该(如果可能的话)不受任何特定的哲学惯例的影响。
https://stackoverflow.com/questions/3545080
复制相似问题