C++概述2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | /** * 【继承】 * <类重用的思想> * 组合、继承 * * <what> * 保持已有类的特性 而 构造新类的过程; * * 继承与派生 * 在新类角度: * 新类继承了哪些已有类; * 在已有类角度: * 从已有类派生了哪些新类; * * 基类与派生类 * 被继承的已有类 称为基类(父类); * 派生类 * 派生出的新类; * * 继承的目的: * 实现代码(设计)重用; * 派生的目的: * 当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造; * * <派生类的声明> * class 派生类名 : 访问修饰符 基类名 * { * 成员 * } * * *** C++支持多继承 * * <继承的逻辑关系> * is a * *** 当继承与组合均允许的情况下,首选组合; * * <派生类生成过程> * 吸收基类成员 * 改造基类成员 * 添加新的成员 * */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | /** * 【多态】 * <what> * 当类存在继承关系时,会根据调用函数的对象的类型来执行不同的函数。 * * <分类> * 绑定: * 把一个标识符名 与 一个存储地址 联系在一起的过程; * * 按 实现的时机: * 编译时多态 * 绑定工作在编译连接阶段完成; * eg:方法重载 * 运行时多态 * 绑定工作在运行期间完成; * eg:方法重写 * * <运算符重载> * 对 已有的运算符 赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为; * * 2种重载方式: * 重载为类的非静态成员函数 * 重载为类的非成员函数 * * 声明: * 函数类型 operator运算符(形参) * { * ... * } * * <虚函数> * what * 在基类中使用关键字 virtual 声明的函数; * 作用 * 在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。 * *** * 为每个具有虚函数的类,准备了一张虚函数表; * 当某个类中有虚函数,编译器为这个类的对象的数据成员增加一个隐含的数据成员(指向虚函数表的指针); * 运行时可以根据实际类型找到对应的函数; * 声明: * virtual 函数类型 函数名(形参列表) * { * ... * } * * 纯虚函数: * what * 在一个基类中声明的虚函数,在基类中没有具体的实现内容,由派生类根据实际需要定义自己的版本; * 声明: * class 类名 * { * virtual 类型 函数名(参数列表)= 0; * } * */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /** * 【模板】 * <函数模板> * 作用 * 创建一个通用功能的函数,以支持多种不同形参; * 声明 * template <typename 类型> * 函数声明 * 原理 * 编译器 根据 实际参数类型及函数模板 反推,重新生成一个新的函数; * * <类模板> * 作用 * 使用类模板 使用户可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型; * 声明 * template <class type> class class-name {...} * 原理 * 编译器 根据 实际模板的参数类型,生成完整的类的代码; * * *** * C++采用的是类型生成机制: * 根据模板生成代码 */ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | /** * 【群体】 * what * 由多个数据元素组成的集合体; * 分类 * 线性群体、非线性群体 * * <线性群体> * what * 线性群体中的元素 按位置排列有序; * * 线性群体的不同访问方法 * 1、直接访问 * 无需按顺序依次访问 * * 直接访问群体->数组 * 静态数组: * 具有固定元素个数的群体,其中的元素可以通过下标直接访问; * (缺点:大小在编译时已经确定,运行时无法修改) * 动态数组: * 由一系列位置连续的,任意数量相同类型的元素组成; * (优点:元素个数在运行时可改变、缺点:开销大) * * 逻辑相邻关系 与 物理相邻关系 对应,对数组元素进行更新时,需要顺序移动; * * 2、顺序访问 * 必须按顺序依次访问 * * 顺序访问群体->链表 * what * 动态数据结构; * 由结点组成,结点运行时动态生成,每个结点要存储 数据本身+下一个结点的存储地址; * 逻辑上的相邻关系 不依赖 物理上的相邻关系; * * * 索引访问 * * 特殊的线性群体 * 1、栈 * what * 只能从一端操作的线性群体; * 可以访问的一端称栈顶,另一端称栈底; * 作用 * 处理表达式 * 基本状态 * 栈空、栈满、一般状态 * * 2、队列 * what * 只能一端添加,另一端删除元素的线性群体; * 状态 * 队空、队满、一般状态 * * * <非线性群体> * what * 数据元素 不依赖位置顺序 来标识元素; * * <群体数据的组织> * 排序 * what * 将计算机的一系列数据 按照某种规则 排成有序的; * 排序的2个基本操作: * 比较; * 交换; * 分类 * 内部排序 * 全部数据在内存中排序 * 外部排序 * 当数据量很大时,需要将磁盘数据一部分加载到内存进行排序 * 查找 * 无序数据 * 只能顺序查找; * 有序数据 * 二分查找... * */ |
1 2 3 4 5 6 | /** * 【泛型程序设计】 * what * 将算法从特定的数据结构中抽象处理,称为通用的; * 编写不依赖于具体数据类型的程序; */ |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2021-04-14 《计算机网络原理-西安交通大学》---广域网
2020-04-14 JavaSE---内存分配
2020-04-14 JavaSE---GC
2020-04-14 JavaSE---引用