首页 > 编程语言 >【C++】继承 ⑪ ( 多继承 | 多继承语法 | 多继承案例 )

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

时间:2023-10-28 10:03:58浏览次数:34  
标签:继承 子类 C++ 语法 Parent2 Parent1 父类 public



文章目录

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







一、多继承




1、多继承基本语法



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

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


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

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


多继承语法 :

class 子类名称 : 访问控制关键字 父类名称1, 访问控制关键字 父类名称2, ... 访问控制关键字 父类名称n
{
	// 子类内容
}
  • 访问控制关键字 :
  • public : 表示 公有继承 ;
  • protected : 表示 保护继承 ;
  • private : 表示 私有继承 ;
  • 继承的 每个 父类 都可以指定一个 访问控制关键字 ;


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



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

class Child : public Parent1, public Parent2 
{
public:
	Child(int x, int y, int z): Parent1(x), Parent2(y)
	{
		this->c = z;
	}
}



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



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



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

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

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

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





二、多继承案例




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



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



代码示例 :

#include "iostream"
using namespace std;

class Parent1 {
public:
	 int a;
};

class Parent2 {
public:
	int b;
};

class Child : public Parent1, public Parent2 
{
public:
	void print()
	{
		// 类内部访问父类成员
		cout << "Parent1::a = " << Parent1::a << " , Parent2::b = " << Parent2::b << endl;
	}
};

int main() {

	Child child;
	// 打印初始状态的值
	child.print();

	child.a = 10;
	child.b = 20;
	child.print();

	child.Parent1::a = 30;
	child.Parent2::b = 40;
	child.print();

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
}

执行结果 :

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

【C++】继承 ⑪ ( 多继承 | 多继承语法 | 多继承案例 )_原力计划



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



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



代码示例 :

#include "iostream"
using namespace std;

class Parent1 {
public:
	Parent1(int x)
	{
		this->a = x;
	}
public:
	 int a;
};

class Parent2 {
public:
	Parent2(int x)
	{
		this->b = x;
	}
public:
	int b;
};

class Child : public Parent1, public Parent2 
{
public:
	Child(int x, int y, int z): Parent1(x), Parent2(y)
	{
		this->c = z;
	}
public:
	void print()
	{
		cout << "a = " << a << " , b = " << b << " , c = " << c << endl;
	}
public:
	int c;
};

int main() {

	Child child(1, 2, 3);
	// 打印初始状态的值
	child.print();

	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
}

执行结果 :

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

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


标签:继承,子类,C++,语法,Parent2,Parent1,父类,public
From: https://blog.51cto.com/u_14202100/8065038

相关文章

  • Python 中多态性的示例和类的继承多态性
    单词"多态"意味着"多种形式",在编程中,它指的是具有相同名称的方法/函数/操作符,可以在许多不同的对象或类上执行。函数多态性一个示例是Python中的len()函数,它可以用于不同的对象。字符串对于字符串,len()返回字符的数量:示例x="HelloWorld!"print(len(x))元组......
  • Python 中多态性的示例和类的继承多态性
    单词"多态"意味着"多种形式",在编程中,它指的是具有相同名称的方法/函数/操作符,可以在许多不同的对象或类上执行。函数多态性一个示例是Python中的len()函数,它可以用于不同的对象。字符串对于字符串,len()返回字符的数量:示例x="HelloWorld!"print(len(x))元组对......
  • C++数组
    C++数组声明数组在C++中要声明一个数组,需要指定元素的类型和元素的数量,如下所示:typearrayName[arraySize];这叫做一维数组。arraySize必须是一个大于零的整数常量,type可以为任意有效的C++数据类型。例如:doublevalance[10];初始化数组doublebalance[5]={1000.0,2.0,......
  • C++常量
    C++常量一、整数常量整数常量可以是十进制,八进制或十六进制的常量。前缀指定基数:0x或0X表示十六进制,0表示八进制,不带前缀则表示十进制。整数常量也可以带一个后缀,后缀是U和L的组合,U表示无符号整数(unsigned),L表示长整数(long),后缀可以是大写,也可以是小写,U和L的顺序任意。85......
  • C++数字及计算
    C++数字及计算C++定义数字#include<iostream>usingnamespacestd;intmain(){ //数字定义 shorts; inti; longl; floatf; doubled; //数字赋值 s=10; i=1000; l=1000000; f=230.45; d=30949.374; cout<<"shorts:"<<s<<en......
  • C++函数定义、声明及调用
    C++函数定义、声明及调用以计算两个数最大值为例,说明C++函数定义、声明及调用#include<iostream>usingnamespacestd;intmax(intnum1,intnum2);//函数声明intmain(){ inta=100;//局部变量声明 intb=200;//局部变量声明 intret; ret=max(a,b);//函数调......
  • c++恶心的char和string
    统计数字出现次数。Char的长度Strlen(char) string的长度.size()函数与.length()Char和string都可以==比较。注意stringa=”1adbcde”,而a[0]是char类型需要转换。 #include<bits/stdc++.h>#include<string>usingnamespacestd;intmain(){intn;charx;cin>>......
  • c++函数指针
    一、函数指针基础知识二、深入探讨函数指针三、auto四、使用typedef进行简化五、指针和const介绍安装使用参考介绍这是一个介绍。安装这是安装说明。使用这是使用说明。参考1.尽可能使用const一、函数指针基础知识完成函数指针需要的工作:获取函数的地址。声......
  • Java继承 多线程的实现方式——利用 Callable 接口 和 Future 接口方式实现
    利用Callable接口和Future接口方式实现:这种实现方式可以获取到多线程运行的结果 步骤:1.创建一个类,类名比如叫MyCallable,并实现 Callable接口  注:Callable接口有一个泛型,因为这种方式可以获取到多线程运行的结果,泛型就表示结果的类型2.重写 Callable接口里面......
  • C++从std::vector<int>类型数据创建二叉树
    背景在和chatGPT的日常代码交流中,这位“老师”总能给出不不少好代码,以下就是C++从std::vector类型数据创建二叉树的完整代码段:TreeNode*createBinaryTree(conststd::vector<int>&nodes,intindex){if(index>=nodes.size()||nodes[index]==-1){retu......