欢迎光临散文网 会员登陆 & 注册

三、类的继承(派生)

2022-11-07 08:30 作者:爱玩UE5的小哥哥  | 我要投稿

C++ 中的继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产。
继承(Inheritance)可以理解为一个类继承另一个类成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。
在C++中,派生(Derive和继承是一个概念,只是站的角度不同。继承是儿子接收父亲的产业,派生是父亲把产业传承给儿子。
被继承的类称为父类或基类,继承的类称为子类或派生类。“子类”和“父类”通常放在一起称呼,“基类”和“派生类”通常放在一起称呼。
派生类除了拥有基类的成员,还可以定义自己的新成员,以增强类的功能。

语法

class 派生类名:[继承方式] 基类名{
    派生类新增加的成员
};

继承方式:public、protected、private

一.继承方式与基类成员在派生类中的访问权限

1.public继承方式

基类中所有 public 成员在派生类为 public 属性;

基类中所有 protected 成员在派生类中为 protected 属性;

基类中所有 private 成员在派生类中不可见(不能使用)。

2.protected继承方式

基类中的所有 public 成员在派生类中为 protected 属性;

基类中的所有 protected 成员在派生类中为 protected 属性;

基类中的所有 private 成员在派生类中不可见(不能使用)

3.private继承方式

基类中的所有 public 成员在派生类中均为 private 属性;

基类中的所有 protected 成员在派生类中均为 private 属性;

基类中的所有 private 成员在派生类中不可见(不能使用)

派生的两种典型场景

1. 当你创建的新类与现有的类相似,只是多出若干成员变量或成员函数时,可以使用继承,这样不但会减少代码量,而且新类会拥有基类的所有功能。
2.当你需要创建多个类,它们拥有很多相似的成员变量或成员函数时,也可以使用继承。可以将这些类的共同成员提取出来,定义为基类,然后从基类继承,既可以节省代码,也方便后续修改成员。

二.继承时遮蔽基类成员问题

如果派生类中的成员(包括成员变量和成员函数)和基类中的成员重名,那么就会遮蔽从基类继承过来的成员。所谓遮蔽,就是在派生类中使用该成员(包括在定义派生类时访问基类成员,也包括通过派生类对象访问该成员)时,实际上使用的是派生类新增的成员,而不是从基类继承来的。

三.派生类的构造函数

类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。

在设计派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数完成,但是大部分基类都有 private 属性的成员变量,它们在派生类中无法访问,更不能使用派生类的构造函数来初始化。
这种矛盾在C++继承中是普遍存在的,解决这个问题的思路是:在派生类的构造函数中调用基类的构造函数。

无论派生类有没有自己的构造函数,在创建派生类的对象时必须调用基类的构造函数



三、类的继承(派生)的评论 (共 条)

分享到微博请遵守国家法律