`
isiqi
  • 浏览: 16339484 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Item 40 多重继承

阅读更多

1> 有多重继承,就有可能继承相同的名字:

即使一个公有,一个私有,重名了也不行!C++先找函数,然后才看是否可以访问。

2> 有共同的基类,类图就成了环:

那么一个IOFile内有多少个File拷贝?
C++默认是两个File。不过,也可以只有一个:

STL中的多重继承大部分是虚继承。basic_ios、basic_istream、basic_ostream和basic_iostream这四个例外。
从正确性上来看,似乎所有的多重公有继承都应该声明成virtual public。但这样生成的代码大、访问速度慢,虚基类的初始化和赋值的规则更复杂。

建议:
1> 多使用“非虚继承”
2> 非使用“虚继承”不可的时候,尽量不在其中放数据。这就像Java中的interface了。

下面是多重继承的例子:

分享到:
评论

相关推荐

    浅析python继承与多重继承

    直接子类化内置类型(如dict,list或str)容易出错,因为内置类型的方法通常会忽略用户覆盖的方法,不要子类化内置类型,用户自定义的类应该继承collections模块。 def __setitem__(self, key, value): super().__...

    C#的知识类库(继承)

    C#支持单一继承,即一个子类只能直接继承一个父类,但可以通过接口实现多重继承的效果。 1. 继承语法:`class DerivedClass : BaseClass` 2. 基类成员访问:子类可以访问基类的公共和受保护的成员。 3. 覆盖和隐藏...

    最常见的-35-个-Python-面试题及答案.docx

    2. 多重继承 - 一个子类继承自多个基类 3. 多级继承 - 一个子类继承自一个基类,而基类继承自另一个基类 4. 分层继承 - 多个子类继承自同一个基类 5. 混合继承 - 两种或两种以上继承类型的组合 关于继承的更多...

    PHP类继承 extends使用介绍

    PHP不支持多重继承,即一个类只能继承自一个基类。 ### PHP中的final关键字 在PHP中,final关键字用于指定不能被继承的类或者不能被重写的类方法。当一个类被声明为final时,它不能成为其他类的父类。当一个方法被...

    最常见的35个Python面试题及答案.pdf

    Python 支持以下类型的继承:单继承、多重继承、多级继承、分层继承和混合继承。 7. 什么是 Flask? Flask 是一个使用 Python 编写的轻量级 Web 应用框架,BSD 授权。其 WSGI 工具使用外部库。因为 Flask 被称为轻...

    More Effecitve C++

    #### 理解虚拟函数、多继承、虚基类和RTTI所需的代价(ITEM 24) 虚拟函数、多继承和RTTI等特性虽然强大,但它们也会带来额外的运行时开销。理解这些特性的代价,可以帮助程序员做出明智的设计选择。 ### 技巧 ##...

    MoreEffectiveC++

    #### Item24: 了解虚函数、多重继承、虚基类和RTTI的成本 - **定义**:这些特性虽然强大但也有额外开销。 - **应用场景**: - 在需要动态绑定或多态性时使用。 - **注意事项**: - 虚函数表和虚基类指针增加了对象...

    j2ee模拟笔试很有帮助

    因此,正确的选项是C,即命名空间(i)、方法重载(ii)和多重继承(iv)。 ### 三、MySQL函数mysql_select_db() `mysql_select_db()`函数用于选择一个数据库连接上指定的数据库。这是进行数据库操作前的一个基本步骤。...

    More Effecitve C++.

    - 可能还包括C++中的命名空间、多重继承、访问控制、友元、构造函数和析构函数的最佳实践等。 通过学习《More Effective C++》,开发者能够深入理解C++的特性,编写出更高效、更健壮的代码,同时避免常见的陷阱和...

    android瀑布流容器

    在Android中,我们通常使用自定义ViewGroup来实现这个功能,比如继承自LinearLayout或者RelativeLayout。关键在于重写`onMeasure()`和`onLayout()`方法,这两个方法分别用于测量子View的大小和确定它们的位置。 在`...

    groovy-and-java-8

    在类和继承方面,Groovy 支持多重继承,而 Java 受限于单继承。然而,Java 通过接口弥补了这一点,允许一个类实现多个接口。Java 8 添加了默认方法来增强接口,进一步模拟多重继承的行为。 在元编程方面,Groovy ...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     1.5.1 Sales_item类 17  1.5.2 初识成员函数 20  1.6 书店程序 21  小结 23  术语表 23  第Ⅰ部分 C++基础 27  第2章 变量和基本类型 29  2.1 基本内置类型 30  2.1.1 算术类型 30  2.1.2 类型转换 32  ...

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     1.5.1 Sales_item类 17  1.5.2 初识成员函数 20  1.6 书店程序 21  小结 23  术语表 23  第Ⅰ部分 C++基础 27  第2章 变量和基本类型 29  2.1 基本内置类型 30  2.1.1 算术类型 30  2.1.2 类型转换 32  ...

    ListView嵌套GridView

    下面将详细介绍这种多重嵌套的实现方式。 1. **ListView概述**: - ListView是一个可滚动的视图,用于显示一系列的数据项,通常用于显示大量数据,具有高效的内存管理,通过ViewHolder优化性能,避免频繁的视图...

    背包算法程序

    2. `Item.hpp`或`item.cpp`:定义物品类的头文件和源文件,用于存储物品信息。 3. `Backpack.hpp`或`backpack.cpp`:定义背包类,实现动态规划逻辑。 4. `test.cpp`或`main_test.cpp`:测试文件,用于验证算法的正确...

    多层TreeWidget可选实现

    TreeWidget是Qt库中的QTreeWidget类,继承自QWidget,提供了用于展示层次数据的表格视图。每个节点都可以拥有子节点,形成一个树形结构。节点通常包含一个图标、一个文本标签以及可能的扩展和折叠按钮。 **2. 多层...

    2021-2022计算机二级等级考试试题及答案No.14927.docx

    7. Java的继承特性:Java类不允许多重继承,但可以实现多个接口以达到类似效果。 8. Windows98多用户桌面:Windows98支持多用户配置,不同用户可以有定制的桌面环境。 9. 交叉表查询:这种查询可以在紧凑的电子...

    C# 经典 试题 及答案

    - C) C# 支持多接口实现,但不支持多重继承。因此,选项AB是正确的描述。 5. **结构体(struct)和方法**:在 C# 中,结构体是值类型,不需使用 `new` 运算符实例化。题目中的结构体 `Inventory` 定义正确,而 `...

    css中注意的地方

    - 使用:`<div id="main"><ul><li>Item 1</li></ul></div>` 通过这种方式,我们可以仅通过选择器`#main ul li`来为列表项设置样式,无需额外添加class。 ### 总结 以上列举了CSS编写中需要注意的关键点,这些技巧...

Global site tag (gtag.js) - Google Analytics