【C++】继承 ⑪ ( 多继承 | 多继承语法 | 多继承案例 )

超、凢脫俗 2024-02-21 12:22 121阅读 0赞

文章目录

  • 一、多继承
    • 1、多继承基本语法
    • 2、多继承子类构造初始化
    • 3、多继承中访问父类成员
  • 二、多继承案例
    • 1、代码示例 - 简单多继承案例
    • 2、代码示例 - 多继承构造函数案例

一、多继承


1、多继承基本语法

多继承 概念 : 一个 子类 ( 派生类 ) 可以 继承 多个 父类 ( 派生类 ) ;

  • 一个类可以继承多个类的属性和方法 ;
  • 使用多继承 , 可以创建更复杂的类 , 该派生类可以组合多个基类的功能 ;

只有 C++ 语言有多继承概念 , 别的语言没有该概念 ;

  • Java 语言只能继承一个父类 , 可以实现多个接口 ;

多继承语法 :

  1. class 子类名称 : 访问控制关键字 父类名称1, 访问控制关键字 父类名称2, ... 访问控制关键字 父类名称n
  2. {
  3. // 子类内容
  4. }
  • 访问控制关键字 :

    • public : 表示 公有继承 ;
    • protected : 表示 保护继承 ;
    • private : 表示 私有继承 ;
  • 继承的 每个 父类 都可以指定一个 访问控制关键字 ;

2、多继承子类构造初始化

调用多个父类构造函数 : 如果一个 子类 ( 派生类 ) 继承多个 父类 ( 基类 ) , 使用 初始化列表 调用 多个 父类 的构造函数 初始化 子类继承自父类的 成员变量 ;

  1. class Child : public Parent1, public Parent2
  2. {
  3. public:
  4. Child(int x, int y, int z): Parent1(x), Parent2(y)
  5. {
  6. this->c = z;
  7. }
  8. }

多个父类构造函数调用顺序 : 多个父类 的 构造函数 的 执行顺序 , 与 定义子类时 指定的 父类顺序有关 ;

3、多继承中访问父类成员

子类 可能 继承多个 父类 , 父类 也有可能还有 父类 ,

也就是说 子类 可能需要 访问 父类的成员 , 爷爷类 的成员 ,

如果 访问 的 父类 / 爷爷类 的 成员

  • 成员变量 名称 不同 , 可以直接访问 ;
  • 成员变量 名称 相同 , 就需要使用 父类 :: 成员变量名爷爷类 :: 成员变量名 进行访问 ;

二、多继承案例


1、代码示例 - 简单多继承案例

在下面的代码中 , Child 子类 继承 Parent1 和 Parent2 父类 , 可以使用 Parent1::a 访问 父类1 中的成员变量 , 使用 Parent2::b 访问 父类2 中的成员变量 ;

代码示例 :

  1. #include "iostream"
  2. using namespace std;
  3. class Parent1 {
  4. public:
  5. int a;
  6. };
  7. class Parent2 {
  8. public:
  9. int b;
  10. };
  11. class Child : public Parent1, public Parent2
  12. {
  13. public:
  14. void print()
  15. {
  16. // 类内部访问父类成员
  17. cout << "Parent1::a = " << Parent1::a << " , Parent2::b = " << Parent2::b << endl;
  18. }
  19. };
  20. int main() {
  21. Child child;
  22. // 打印初始状态的值
  23. child.print();
  24. child.a = 10;
  25. child.b = 20;
  26. child.print();
  27. child.Parent1::a = 30;
  28. child.Parent2::b = 40;
  29. child.print();
  30. // 控制台暂停 , 按任意键继续向后执行
  31. system("pause");
  32. return 0;
  33. }

执行结果 :

  1. Parent1::a = -858993460 , Parent2::b = -858993460
  2. Parent1::a = 10 , Parent2::b = 20
  3. Parent1::a = 30 , Parent2::b = 40
  4. Press any key to continue . . .

在这里插入图片描述

2、代码示例 - 多继承构造函数案例

多继承中 , 子类的构造函数中 , 需要在 函数初始化列表 中 调用 父类的 初始化函数 , 对 继承自 父类的 成员变量 进行初始化操作 ;

代码示例 :

  1. #include "iostream"
  2. using namespace std;
  3. class Parent1 {
  4. public:
  5. Parent1(int x)
  6. {
  7. this->a = x;
  8. }
  9. public:
  10. int a;
  11. };
  12. class Parent2 {
  13. public:
  14. Parent2(int x)
  15. {
  16. this->b = x;
  17. }
  18. public:
  19. int b;
  20. };
  21. class Child : public Parent1, public Parent2
  22. {
  23. public:
  24. Child(int x, int y, int z): Parent1(x), Parent2(y)
  25. {
  26. this->c = z;
  27. }
  28. public:
  29. void print()
  30. {
  31. cout << "a = " << a << " , b = " << b << " , c = " << c << endl;
  32. }
  33. public:
  34. int c;
  35. };
  36. int main() {
  37. Child child(1, 2, 3);
  38. // 打印初始状态的值
  39. child.print();
  40. // 控制台暂停 , 按任意键继续向后执行
  41. system("pause");
  42. return 0;
  43. }

执行结果 :

  1. a = 1 , b = 2 , c = 3
  2. Press any key to continue . . .

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,121人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++ 继承继承

    继承的作用: 用已有的数据类型创建新的数据类型,并保留已有数据类型的特点,被继承的类成为父类或者基类,继承的类成为子类或者派生类. 继承的一般形式 class 子类 :

    相关 继承

    概念: 一个类有多个直接积累的集成关系称为多继承 语法:class 派生类名:访问权限  基类名1,访问权限  基类名2,访问权限  基类名3.... 实例: i