zoukankan      html  css  js  c++  java
  • C++ 的多继承与虚继承

    C++之多继承与虚继承

     

    1. 多继承


    1.1 多继承概念

    1. 一个类有多个直接基类的继承关系称为多继承
    2. 多继承声明语法
    class 派生类名 : 访问控制 基类名1, 访问控制 基类名2, ...
    {
        数据成员和成员函数声明
    };
    1. 类 C 可以根据访问控制同时继承类 A 和类 B 的成员,并添加自己的成员:

    1.2 多继承的派生类构造和访问

    • 多个基类的派生类构造函数可以用初始化列表调用基类构造函数来初始化数据成员
    • 执行顺序与单继承构造函数情况类似。多个直接基类构造函数执行顺序取决于定义派生类时指定的各个继承基类的顺序。
    • 一个派生类对象拥有多个直接或间接基类的成员。不同名成员访问不会出现二义性。如果不同的基类有同名成员,派生类对象访问时应加以识别。

    1.3 多继承的简单应用

    1.3.1 示例 1

    1.3.2 示例 2

    2. 虚继承 virtual 


    如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性。 如下图:

    如下图的分析:

    总结:

    1. 如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性。
    2. 如果在多条继承路径上有一个公共的基类,那么在继承路径的某处汇合点,这个公共基类就会在派生类的对象中产生多个基类子对象。
    3. 要使这个公共基类在派生类中只产生一个子对象,必须对这个基类声明为虚继承,使这个基类成为虚基类。
    4. 虚继承声明使用关键字 virtual

    如下虚继承示例:

  • 相关阅读:
    Fiddler使用教程(收藏)
    js类的几种写法
    对js中prototype的理解
    【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)--转
    js加载顺序
    html加载js那些事
    HTTP状态码详解
    JS编码解码
    css绝对定位、相对定位和文档流的那些事
    jQuery事件绑定方法bind、 live、delegate和on的区别
  • 原文地址:https://www.cnblogs.com/tsingke/p/12081234.html
Copyright © 2011-2022 走看看