• 6.3多重继承


    7.5 多继承

    小结

    7.5 多继承

    一个类有多个直接某类的继承关系称为多继承。

    多继承声明语法

    class 类名1:访问控制 类名2,访问控制 类名3,...,访问控制 类名n

    {

    ...//定义派生类自己的成员

    }

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

    多个基类的派生类构造函数可以用初始化调用基类构造函数初始化数据成员。

    执行顺序与单继承构造函数情况类似。多个直接基类构造函数执行顺序取决于定义派生类时指定的各个继承基类的顺序。

    一个派生类对象拥有多个直接或间接基类的成员。不同名成员访问不会出现二义性。如果不同的基类有同名成员,派生类对象访问时应该加以识别。

    多重继承的派生类负责所有基类中的成员初始化。基类构造函数的调用顺序取决于定义派生类时指明的基类顺序。

     1 #include <iostream>
     2 
     3 class myclass1
     4 {
     5 public:
     6     void run(char *str)
     7     {
     8         system(str);
     9     }
    10     myclass1()
    11     {
    12         std::cout << "myclass1 is created" << std::endl;
    13     }
    14     ~myclass1()
    15     {
    16         std::cout << "myclass1 is deleted" << std::endl;
    17     }
    18 };
    19 
    20 class myclass2
    21 {
    22 public:
    23     int add(int a, int b)
    24     {
    25         return a + b;
    26     }
    27     myclass2()
    28     {
    29         std::cout << "myclass2 is created" << std::endl;
    30     }
    31     ~myclass2()
    32     {
    33         std::cout << "myclass2 is deleted" << std::endl;
    34     }
    35 };
    36 
    37 class myclass :public myclass1, public myclass2//基类构造函数的调用顺序取决于定义派生类时指明的基类顺序
    38 {
    39 public:
    40     void print(char *str)
    41     {
    42         std::cout << str << std::endl;
    43     }
    44     myclass()
    45     {
    46         std::cout << "myclass is created" << std::endl;
    47     }
    48     ~myclass()
    49     {
    50         std::cout << "myclass is deleted" << std::endl;
    51     }
    52 };
    53 
    54 void main()
    55 {
    56     myclass *pmy1 = new myclass;
    57 
    58     delete pmy1;
    59 
    60     system("pause");
    61 }

    小结

    继承是面向对象程序设计实现软件重用的重要方法。程序员可以在已有基类的基础上定义新的派生类。

    单继承的派生类只有一个基类。多继承的派生类有多个基类。

    派生类对基类成员的访问由继承方式和成员性质决定。

    创建派生类对象时,先调用基类构造函数初始化派生类中的基类成员。调用析构函数的次序和调用构造函数的次序相反。

    C++提供虚继承机制,防止类继承关系成员访问的二义性。

    多继承提供了软件重用的强大功能,也增加了程序的复杂性。

  • 相关阅读:
    Firefox页面截图插件Pearl Crescent Page Saver
    Effective C++ (5) 几个关于数组的问题
    Notice
    Effective C++ (4) c++中的命名空间
    Effective C++ (7) 强制类型转换
    Effective C++ (3) 避免C++头文件的多重包含
    Effective C++ (2) C#中的Const和Readonly
    总结一下这段时间的生活
    如何让rose一开始的那个向导对话框出现?
    Effective C++ (8) 顺序容器vector,list,deque
  • 原文地址:https://www.cnblogs.com/denggelin/p/5668034.html
Copyright © 2020-2023  润新知