C++和Java:使用虚拟基类

Jag*_*uar 5 c++ java virtual

在比较C++和Java多重继承时,我有些疑惑.

  1. 即使Java通过接口使用多个多级继承 - 但为什么它不像C++那样使用虚拟基类之类的东西?是因为java接口的成员在内存中确保了一个副本(它们是公共静态final),并且这些方法只是声明而没有定义?

  2. 除了节省内存之外,C++中还有其他虚拟类的使用吗?如果我在多重继承程序中忘记使用此功能,是否有任何警告?

  3. 这个有点哲学 - 但为什么C++开发人员没有把它作为默认制作每个基类,虚拟?提供灵活性的需求是什么?

将举例说明.谢谢 !!

Mar*_*ull 3

1)Java接口没有属性。C++ 中使用虚拟基类的原因之一是为了防止重复的属性以及与之相关的所有困难。

2) 在 C++ 中使用虚拟基类至少会带来轻微的性能损失。此外,构造函数变得如此复杂,因此建议虚拟基类仅具有无参构造函数。

3)正是因为c++哲学:人们不应该要求对可能不需要的东西进行惩罚。