基类中的成员都可以被其派生类继承_C++入门到精通:面向对象程序设计中的继承与派生!...

本文深入探讨C++中的继承概念,包括派生类的定义、继承方式(public, private, protected)、访问控制、类型兼容性原则、构造与析构函数的调用顺序、同名成员处理以及多继承带来的二义性问题。强调继承在面向对象程序设计中的重要性,以及如何通过继承实现类之间的关系和功能扩展。" 117107670,10548048,C语言判断文件和目录是否存在,"['C语言', '文件操作', '文件系统']
摘要由CSDN通过智能技术生成

面向对象程序设计有4个主要特点:抽象、封装、继承和多态性。本章主要介绍有关继承的知识,多态性将在后续章节中讲解。

继承性是面向对象程序设计最重要的特征,可以说,如果没有掌握继承性,就等于没有掌握类和对象的精华,就是没有掌握面向对象程序设计的真谛。

继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。

░ 继承关系举例

万事万物中皆有继承,是重要的现象。

案例:植物继承图

b37d22f0de4d9c1c56acc41a5cf5d7e9.png

传递性:高等植物,蕨类植物,苔藓都是植物,具有植物的共同特征。

不对称性:不是所有植物都属于菌类。

继承是类之间定义的一种重要关系

    一个B类继承A类,或者说从A类派生B类;那么A类称为基类(父类),B类称为派生类(子类),像父子关系一样。

59d28fc8596b7bb011b7653951d55d14.png

has-A:类的组合;use-A:友元类,做函数参数传递;is-A:继承。

░ 派生类的定义

1、类继承关系的语法

    class 派生类名:基类名列表

    {

//成员变量和成员函数声明...

    }

2、基类名列表:

访问限定符 基类名1,访问限定符 基类名2...

3、访问限定符表示派生类对基类的继承方式,使用关键字:

    ▷ public 公有继承

    ▷ private 私有继承

    ▷ protected 保护继承

派生类继承了基类的全部成员变量和成员方法(除了构造和析构之外的成员方法),但是这些成员的访问属性,在派生过程中是可以调整的。

░ 继承重要说明和示例

说明:

    1、子类拥有父类的所有成员变量和成员函数;

    2、子类可以拥有父类没有的方法和属性;

    3、子类就是一种特殊的父类;

    4、子类对象可以当作父类对象使用(在父类做函数形参时,可以传子类对象)。

实例:

8088b75d667477d448d801bbfb9ea948.png

░ 派生类的访问控制

1、不同的继承方式会改变继承成员的访问属性

    public继承:父类成员在子类中保持原有访问级别;

    private继承:父类成员在子类中变为private成员;

    protected继承:父类中public成员会变成protected。

  父类中protected成员仍然为protected;父类中private成员仍然为private

2、private成员在子类中依然存在,但是却无法访问到。不论种方式继承,派生类都不能直接使用基类的私有成员 。(可以通过提供接口访问)

90cd23498f827b18a64440311cbf6ce5.png

类的继承方式会影响父类的属性在子类中的访问权限。

░ 能否被访问、继承方式选择

1、如何判断成员是否能被访问:“三看”原则

    1> 看调用语句,是再写在子类的内部还是外部;

    2> 看子类如何从父类继承;

    3> 看父类访问级别。

2、派生类类成员访问级别设置的原则

思考:如何恰当的使用public,protected和private为成员声明访问级别?

    1> 需要被外界访问的成员直接设置为public;

    2> 只能在当前类中访问的成员设置为private;

    3> 只能在当前类和子类中访问的成员设置为protected,protected成员的访问权限介于public和private之间。

    PS:一般情况下,均使用public继承方式。

░ 类型兼容性原则

类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。

通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。

类型兼容规则中所指的替代包括以下情况:

    ▷ 子类对象可以当作父类对象使用

    ▷ 子类对象可以直接赋值给父类对象

    ▷ 子类对象可以直接初始化父类对象

    ▷ 父类指针可以直接指向子类对象

    ▷ 父类引用可以直接引用子类对象

在替代之后,派生类对象就可以作为基类的对象使用,但是只能使用从基类继承的成员。

类型兼容规则是多态性的重要基础之一。

总结:子类就是特殊的父类。

░ 继承中的构造和析构

1、问题:子类如何初始化父类成员?父类与子类的构造函数有什么关系?

    ☆ 在子类对象构造时,需要调用父类构造函数对其继承得来的成员进行初始化。

    ☆ 在子类对象析构时,需要调用父类析构函数对其继承得来的成员进行清理。

3daf1b22bf158598f190d6905995b1bc.png

299438e8e6545482532a4b1ef36214e8.png

2、继承中的构造析构调用原则

    ☆ 子类对象在创建时会首先调用父类的构造函数;

    ☆ 父类构造函数执行结束后,执行子类的构造函数;

    ☆ 当父类的构造函数有参数时,需要在子类的初始化列表中显示调用;

    ☆ 析构函数调用的先后顺序与构造函数相反。

2360a194341baffe3124d6db26bdf0fd.png

░ 继承中同名成员处理方法

1、当子类成员变量与父类成员变量同名时,子类依然从父类继承同名成员

2、在子类中通过作用域分辨符::进行同名成员区分(在派生类中使用基类的同名成员,显式地使用类名限定符)

3、同名成员存储在内存中的不同位置

5b36153060902ab1a1474b382d201c79.png

总结:同名成员变量和成员函数通过作用域分辨符进行区分。

░ 继承中的static成员

继承和static关键字在一起会产生什么现象?

    ▷ 基类定义的静态成员,将被所有派生类共享

    ▷ 派生类中访问静态成员,用以下形式显式说明:

7871a27c9d44058cccd9e9a3d4494629.png

f2728fd6ccbd7da7ec85ff5934c1094b.png

接下来的内容

035881aa0702027093b54c2901c56816.png

░ 多继承

派生类只有一个基类,称为单继承(Single Inheritance)。除此之外,C++也支持多继承(Multiple Inheritance),即一个派生类可以有两个或多个基类。

多继承容易让代码逻辑复杂、思路混乱,一直备受争议,后来的 Java、C#、PHP 等干脆取消了多继承。

e1e9c4b97da0fc5c814fdea58c646573.png

░ 多继承的二义性

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

为了解决多继承时的命名冲突和冗余数据问题,C++ 提出了虚继承,使得在派生类中只保留一份间接基类的成员。

使用关键字Virtual:

a036ec189933e0f4980965db5d01e993.png

好啦,今天的学习就到此为止吧~明天继续~

4fd99125b89bf8009f933ae32373720a.png

最后,不管你是转行也好,初学也罢,进阶也可,如果你想学编程~

【值得关注】我的C/C++编程学习交流俱乐部:

【Q群:795246887】

问题答疑,学习交流,技术探讨,还有超多编程资源大全,零基础的视频也超棒~

点击下方 ↓ 原文链接即可直接进入~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值