CPP程序设计进阶篇笔记(主要还是ppt的截图)Orz

本文深入探讨C++中的继承概念,包括公有、私有和保护继承的区别,以及它们如何影响派生类成员的可见性。同时,解析多态性原理,包括虚函数、虚析构函数的作用,以及如何通过基类指针访问派生类成员。此外,还介绍了函数模板、类模板的使用,以及STL、异常处理等高级主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承的基本概念及语法

既能用继承,又能用组合,优先选用组合,会比较方便
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
派生类的构成
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

继承方式:

公有继承,私有继承,保护继承
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
被继承的保护成员在派生类内相当于公有成员,可以直接访问,但是在类外不可。
总而言之,这些不同的继承方式影响的是原来类成员的在派生类中的身份问题,这些影响不会出现在当前派生类,会影响到派生类的派生类。
基类和派生类的类型转换:仅限于public公有继承在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

派生类的构造函数

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
多继承时,构造函数的构造顺序是取决于继承的顺序

派生类的复制构造函数

在这里插入图片描述在这里插入图片描述
派生类对象可以充当基类对象,的引用可以用来初始化基类对象的引用。

派生类的析构函数

在这里插入图片描述
析构的顺序与构造顺序相反

访问从基类继承的成员

当基类派生类成员同名时在这里插入图片描述
不同基类的二义性问题在这里插入图片描述在这里插入图片描述
多继承时的二义性在这里插入图片描述在这里插入图片描述在这里插入图片描述

虚基类(解决冗余问题)

相当于在其派生类里创建了指针,而在最远派生类直接继承
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

类的多态性

操作接口具有表现不同形态的能力,不同环境下对不同对象有不同处理方式,通过绑定实现,绑定就是将一个标识符名称和一段代码结合起来——举例:函数调用表达式与函数体结合。编译时的绑定,早绑定。运行时的绑定,晚绑定。

运算符重载规则:

在这里插入图片描述在这里插入图片描述在这里插入图片描述
双目运算符重载为成员函数
在这里插入图片描述
该括号里面的形参为双目运算符的第二个参数,因为第一个参数默认为成员类的在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
单目运算符重载为成员函数:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
上述例子表明,前置++运算符返回的是引用,可以作为左值,后置++,返回的临时无名对象的内容,只能作为右值在这里插入图片描述
运算符重载为非成员函数:
1.当第一个操作数(左操作数)为非该类对象时
2.当使用的不是自己设计的类对象

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

虚函数

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
若基类函数为虚函数,派生类重载函数则默认为virtual类型,不管加不加virtual,为了可读性,一般加上。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

虚析构函数:

在这里插入图片描述在这里插入图片描述
在上例中,new函数在构造derive对象时候,只会调用构造函数,不会调用析构函数(当用new来创建对象时,其析构函数不会自动调用,只能通过delete来释放内存。),所以此时应当把析构函数命名为虚函数
在这里插入图片描述
公有继承的所有的派生类都是从基类继承的,编译器会认为它们类型都是一样的。
派生类析构函数调用之后,会紧接着调用基类的析构函数。

虚表与动态绑定——虚函数的实现方法:

在这里插入图片描述在这里插入图片描述

抽象类:

只要含有纯虚函数的是抽象类,不能定义该类的对象(不能实例化)但可以被继承,可以用指针指向它。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

override与final:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
多态是指同样的消息作用于不同的对象会产生不同的行为。运算符重载是静态多态性的,是一种扩充语言的机制,而不是改变语言的机制。
动态多态性是通过虚函数来实现的,派生类对象可以初始化基类的引用,派生类的对象地址,可以赋值给基类的指针。
如果想要通过基类指针和引用访问派生类的对象的成员,就要使用虚函数。因为虚函数才有动态绑定的功能,生成了虚表,里面包含了对应的函数,通过基类指针可以访问不同类的同名函数。
PS:虚基类解决的是类成员标识二义性和信息冗余的问题,而虚函数是实现动态多态性的基础。

函数模板:

在这里插入图片描述
typename在这里和class没有区别在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
并不是随意定模板,若模板参数表是自定义类型,则应该重载相关运算符使该类型能参与运算,,否则会出错。

类模板:

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

线性群体:

在这里插入图片描述在这里插入图片描述
数组类模板:在这里插入图片描述
如何封装一个动态数组类
在这里插入图片描述在这里插入图片描述
为什么有的函数返回值是引用在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
指针转换运算符的作用:在这里插入图片描述
数组类应用举例:在这里插入图片描述在这里插入图片描述

STL简介

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述使用容器要包含相应的头文件在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
transform算法作用:通过循环遍历队列在这里插入图片描述

迭代器:

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

容器的基本功能和分类:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
从迭代器的访问方式和容器中数据组织方式可分为以下两种在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

顺序容器的基本功能:

在这里插入图片描述
顺序容器的通用接口函数:在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
顺序容器的特征:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
顺序容器的插入迭代器与适配器:在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
关联容器的分类和基本功能:在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

函数对象:

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
函数适配器:在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

STL算法:

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

IO流的概念和流类库的结构:

在这里插入图片描述
流是信息的一种流动。
键盘和显示器都是一种“文件对象”
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

输出流概述:

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
文件流内部有一个指针,默认指向文件写入下一个数据的地址在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
fixed表示定点形式,scientific表示科学计数法形式
在这里插入图片描述在这里插入图片描述在这里插入图片描述
向二进制文件输出:
当不需要对外显示阅读,只需要在文件之间传递数据时,只需要传递二进制信息即可,这样传输效率比较高。在这里插入图片描述在这里插入图片描述
C++中不支持对象的序列化,即将类的对象整体存盘。
向字符串输出:
将内存中的一个字符串当作输出的目的地
在这里插入图片描述在这里插入图片描述

输入流概述:

在这里插入图片描述
cin相当于输入流类里已经定义好的对象在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
EOF表示文件结束符,windows中是ctrl+z在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
从字符串输入:在这里插入图片描述在这里插入图片描述

输入输出流:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

异常处理的思想与程序实现:

在这里插入图片描述在这里插入图片描述
抛出之后,try函数括号后面的异常程序均不执行。
在这里插入图片描述在这里插入图片描述
异常接口声明可以使程序可读性变好。在这里插入图片描述
异常处理中的析构与构造:在这里插入图片描述
自动析构发生在throw之后,在catch之前在这里插入图片描述在这里插入图片描述在这里插入图片描述
标准程序库异常处理:
在这里插入图片描述在这里插入图片描述
详细了解要参考cpp类库说明。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值