C++ 派生类的引入与特性

2024-05-14 00:04
文章标签 c++ 特性 引入 派生类

本文主要是介绍C++ 派生类的引入与特性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 继承与派生

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上面的例子可以看出:
继承:一旦指定了某种事物父代的本质特征,那么它的子代将会自动具有哪些性质。这就是一种朴素的可重用的概念。
派生:而且子代可以拥有父代没有的特性,这是可扩充的概念。

1 C++ 的继承关系

继承就是在一个已经存在的类的基础上建立另一个新的类。
已存在的类称为“基类”或“父类”,新建立的类称为“派生类”或“子类”。如图所示:
在这里插入图片描述
在这里插入图片描述

2 派生类的特性

派生类的功能主要通过以下方式来体现:
洗手基类成员;
改造基类成员;
添加新成员;
从编码的角度来看,派生类重基类中比较低的代价换来较大的灵活性:
派生类可以对继承的属性进行扩展、限制或改变。
一旦产生了可靠的基类,只需要调试派生类中所做的修改即可。

二 继承方式:单继承

1 单继承和多继承

单继承:派生类只有一个直接基类。
多继承:派生类有多个直接基类。
在这里插入图片描述

2 单继承派生类

定义单继承派生类的语法格式:
class 派生类名:<继承方式>基类名{
…//派生修饰基类的成员
public private protected
};
虽然继承了基类的所有成员,但是派生类并非都能访问基类的所有成员,继承方式会影响派生类对基类中各种成员的使用。

回顾类成员的访问方式也有public、private、protected分别是什么意思?
和我们这里基础方式的public、private、protected有区别吗?
在这里插入图片描述
公有派生类
class派生类名:public基类名{
…//派生类新添加的成员
};
基类的成员在公有派生类中引用权限
在这里插入图片描述
不可访问成员
在类外补能被直接访问。
在派生类的类内部能被直接访问。

3私有派生类

class派生类名:private基类名{
…//派生类新添加的成员
};
基类的成员在私有派生类中引用权限。
在这里插入图片描述

4 公有派生和私有派生的比较

在这里插入图片描述
虽然派生类继承了基类所有的成员,但是对于派生类来说,基类的私有成员时不可见的,因此不能被派生类所访问。

5 保护成员的引入

为了解决这个问题,C++专门设置了保护成员,即用protected关键字说明的成员。
保护成员的特性:
能够被基类和派生类所访问。
和私有成员一样,类外不能访问。

6 保护派生类

class派生类名:protected基类名{
…//派生类新添加的成员
};
基类的成员在保护派生类中引用权限
在这里插入图片描述

7 小结

不同的继承方式,子类对基类中的成员的访问权限如下表所示:
在这里插入图片描述

三 派生类与基类同名成员的访问方式

1 派生类与基类同名成员的访问方式

C++允许派生类可以重新定义基类的成员,此时称派生类的成员覆盖了基类的同名成员。
如果在派生类中,想使用基类的同名成员,则可以显式地使用类名+限定符的方式,如下所示:
在这里插入图片描述
举例
在这里插入图片描述

四 赋值兼容规则

在公有派生方式下,派生类对象可以作为基类对象来使用,具体方式如下:
派生类的对象可以直接赋值给基类的对象;
基类对象的引用可以引用一个派生类对象;
基类对象的指针可以指向一个派生类对象;

五 单继承的构造与析构

1 单继承派生类的构造函数

派生类构造函数(参数表):基类构造函数(参数表),对象成员1(参数表),…对象成员n(参数表)
{
…//初始化自定义数据成员
}

如果基类使用的是缺省的构造函数或不带参数的构造函数,那么在初始化列表中可以省略“基类构造函数(参数表)”这一项。

2 构造函数和析构调用顺序

构造函数的调用顺序如下:
先调用基类构造函数;
再调用对象成员所属类的构造函数;
最后调用派生类构造函数;

析构函数的调用顺序如下:
先调用派生类的析构函数;
再调用对象成员所属类的析构函数;
最后调用基类的析构函数;
在这里插入图片描述

这篇关于C++ 派生类的引入与特性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987185

相关文章

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

一文教你Python引入其他文件夹下的.py文件

《一文教你Python引入其他文件夹下的.py文件》这篇文章主要为大家详细介绍了如何在Python中引入其他文件夹里的.py文件,并探讨几种常见的实现方式,有需要的小伙伴可以根据需求进行选择... 目录1. 使用sys.path动态添加路径2. 使用相对导入(适用于包结构)3. 使用pythonPATH环境

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑