C++_面向对象设计
面向对象设计(OOP)OOP 概述C++ 面向对象程序设计的三个核心概念: 数据抽象 继承 动态绑定(多态) 数据抽象数据抽象强调: 接口与实现分离 即类只暴露“能做什么”,隐藏“怎么做”。 继承继承强调: 描述类型之间的共同点和差异 基类描述公共部分,派生类描述特有部分。 动态绑定(多态)动态绑定强调: 用统一接口处理不同类型对象 同样是基类指针/引用,运行时可表现出不同派生类行为。 继承:基本概念具有继承关系的类形成一个层次结构。 位于上层的是 基类(base class) 从基类继承得到的是 派生类(derived class) 基类负责什么基类通常负责定义: 所有派生类共有的数据 所有派生类共有的接口 派生类负责什么派生类通常负责: 添加自己的新成员 重新定义(覆盖)某些虚函数 表现出与基类不同的具体行为 继承的写法1234567891011121314151617class Base {public: virtual int get_age() const { return age_; ...
Linux基础命令
Linux 基础命令命令基本格式1命令 [选项] [参数] 选项:以 - 或 -- 开头,用于修改命令的行为。 参数:命令操作的对象,如文件名、目录名等。 1. 文件与目录操作 命令 说明 常用示例 ls 列出目录内容 ls -l 长格式显示ls -a 显示所有文件(包括隐藏文件)ls -lh 以人类可读方式显示文件大小 cd 切换工作目录 cd /home/user 进入指定目录cd .. 返回上一级目录cd ~ 或 cd 返回家目录 pwd 显示当前工作目录的绝对路径 pwd mkdir 创建目录 mkdir dir 创建单个目录mkdir -p a/b/c 递归创建多级目录 rmdir 删除空目录 rmdir emptydir touch 创建空文件或更新文件时间戳 touch file.txt 创建空文件 cp 复制文件或目录 cp file1 file2 复制文件cp -r dir1 dir2 递归复制目录cp -i file1 file2 覆盖前提示 mv 移动或重命名文件/目录 mv oldname newnam...
C++_重载运算与类型转换
重载运算符与类型转换这一章主要解决两个问题: 类对象如何像内置类型一样参与运算 类对象如何在不同类型之间转换 运算符重载:基本概念重载运算符本质上是一个函数。 它的名字形式是: 1operator 运算符号 例如: 1234operator+operator==operator[]operator() 和普通函数一样,重载运算符也有: 返回类型 参数列表 函数体 基本规则重载运算符时要记住: 只能重载已有运算符可以重载: 1+, -, *, ==, [], (), <<, >> 但不能发明新运算符。 至少有一个运算对象是类类型例如: 1int operator+(int, int); // 错误 因为不能改变纯内置类型运算符的含义。 不能改变运算符的: 运算对象个数 优先级 结合律 例如: + 还是二元运算符 ++ 还是一元/后置形式 * 优先级不会变 不能重载的运算符下面 4 个不能重载: 1234::.*.?: 这是高频记忆点。 运算符调用本质例如: 1a + b; 若 + 被重载,本质等价于调用函数。 非成员形...
C++_拷贝控制
拷贝控制当定义一个类时,实际上也在定义: 对象如何拷贝 如何赋值 如何移动 如何销毁 这些由一组特殊成员函数控制,称为: 拷贝控制成员共 5 个: 拷贝构造函数 拷贝赋值运算符 移动构造函数 移动赋值运算符 析构函数 五个特殊成员函数拷贝构造函数控制: 用同类型另一个对象初始化新对象时做什么 例如: 12T a;T b = a; // 拷贝构造 拷贝赋值运算符控制: 一个已存在对象被赋值为另一个同类型对象时做什么 例如: 12T a, b;a = b; // 拷贝赋值 移动构造函数控制: 用一个**将要被销毁的对象(右值)**初始化新对象时做什么 例如: 1T a = T(); // 可能调用移动构造 移动赋值运算符控制: 把一个右值赋给已存在对象时做什么 析构函数控制: 对象销毁时做什么 常用于: 释放动态内存 关闭文件 释放锁 归还系统资源 拷贝、赋值与销毁这是拷贝控制的基础部分。 拷贝构造函数定义如果一个构造函数: 第一个参数是本类类型的引用 且其余参数都有默认值 那么它就是拷贝构造函数 例如: 12345class...
C++_内存管理
内存管理C++ 中对象可以存放在不同区域,不同区域的对象创建方式、销毁时机、管理责任都不同。 对象的生命周期全局对象定义在所有函数之外的对象。 特点: 在程序启动时分配 在程序结束时销毁 局部自动对象定义在函数或代码块中的普通局部变量。 特点: 进入作用域时创建 离开作用域时自动销毁 例如: 123void f() { int x = 10; // 进入 f 时创建,离开 f 时销毁} 局部 static 对象定义在函数内部,但带 static。 特点: 第一次执行到定义处时初始化 一直到程序结束时才销毁 例如: 1234void f() { static int cnt = 0; ++cnt;} 动态分配对象通过 new 创建的对象。 特点: 存在于堆(自由空间) 生命周期不由作用域决定 必须显式释放,或交给智能指针管理 例如: 1int *p = new int(42); 程序中的内存区域复习时主要记三类: 静态内存保存: 全局变量 static 局部变量 类的 static 数据成员 特...
C++_关联容器
关联容器关联容器的特点是: 按关键字(key)而不是按位置存取元素 它们支持: 高效查找 按关键字访问 自动按关键字组织元素(有序容器)或按哈希组织元素(无序容器) 关联容器类型关联容器分两大类: 有序关联容器 无序关联容器 有序关联容器元素按关键字有序保存(默认按 < 排序)。 容器 作用 map 保存 关键字-值 对,每个关键字唯一 set 只保存关键字,每个关键字唯一 multimap 保存 关键字-值 对,关键字可重复 multiset 只保存关键字,关键字可重复 无序关联容器按哈希函数组织元素,不保证有序。 容器 作用 unordered_map 哈希版 map,关键字唯一 unordered_set 哈希版 set,关键字唯一 unordered_multimap 哈希版 multimap,关键字可重复 unordered_multiset 哈希版 multiset,关键字可重复 关联容器与顺序容器的区别顺序容器按“位置”组织元素,如: vector deque list 关联容器按“关键字...
C++_泛型算法
泛型算法标准库没有给每种容器都单独写一套“查找、排序、统计、复制……”成员函数,而是提供了一组泛型算法(generic algorithms)。 之所以叫“泛型”: 可以用于多种容器 也可以用于内置数组 只要提供合适的迭代器即可 大多数算法定义在: 1#include <algorithm> 数值类算法主要定义在: 1#include <numeric> 算法的核心思想算法不直接依赖容器,而是依赖: 迭代器 元素支持的操作 也就是说: 算法不知道它处理的是 vector、list 还是数组 它只知道“这里有一段可遍历的范围” 算法通常作用于一个范围大多数算法都处理一个迭代器范围: 1[first, last) 含义: 从 first 开始 到 last 之前结束 last 指向尾后位置,不包含在范围内 例如: 1find(v.begin(), v.end(), 42); 算法不会改变容器大小这是非常重要的一点。 算法只操作元素,不直接执行容器操作。 因此: 算法可以改元素值 可以重排元素顺序 但不能直接增加或删除容器中的元素 例...
C++_顺序容器
顺序容器容器:一组对象的集合。顺序容器:元素的位置顺序由“加入容器的位置”决定,不依赖元素值。 例如: vector:像可变数组 list:像链表 deque:双端队列 顺序容器类型 容器 特点 vector 可变大小数组;支持快速随机访问;尾部插入快;中间/头部插入删除慢 deque 双端队列;支持快速随机访问;头尾插入删除都快 list 双向链表;不支持随机访问;任意位置插入删除快 forward_list 单向链表;只支持单向遍历;任意位置插入删除快 array 固定大小数组;支持快速随机访问;大小不可变 string 存字符的顺序容器;与 vector<char> 类似,但专门处理字符串 如何选容器复习时可先这样记: 默认首选:vector 需要头部频繁插入/删除:deque 需要中间频繁插入/删除:list / forward_list 大小固定:array 保存字符序列:string 容器中可以放容器1vector<vector<string>> li...
C++_IO库
IO 库C++ 的 IO(输入输出)基于流(stream)。 可以把流理解成:数据流动的通道 输入流:数据流入程序 输出流:数据从程序流出 常见对象: cin:标准输入 cout:标准输出 cerr:标准错误输出 常见操作: >>:读入数据 <<:输出数据 getline:读取一整行 IO 库的常见组件 istream:输入流类型 ostream:输出流类型 iostream:既能输入也能输出的流类型 cin:istream 对象,从标准输入读 cout:ostream 对象,向标准输出写 cerr:ostream 对象,通常输出错误信息 >>:从输入流提取数据 <<:向输出流插入数据 getline:从输入流读取一行到 string IO 库类型和头文件 头文件 主要类型 iostream istream、ostream、iostream fstream ifstream、ofstream、fstream sstream istringstream、ostringstream、stringstre...
C++_类和对象
类类(class)是 C++ 中定义用户自定义类型的工具。类把: 数据(成员变量) 操作数据的函数(成员函数) 封装在一起。 类的核心思想: 数据抽象:只暴露“能做什么”,不强调“怎么做” 封装:把实现细节隐藏起来,只开放必要接口 类的基本概念一个类通常包含两部分: 接口:提供给用户使用的操作 实现:数据成员、内部逻辑、私有辅助函数 使用类时,应关注: 这个类能做什么 如何正确调用它的接口 而不是它内部如何实现。 类的定义类定义描述了: 这个类型有哪些成员 这个类型支持哪些操作 基本形式: 123456class MyClass {public: // 公有接口private: // 私有实现}; 说明: 类定义以 ; 结束 成员可以是: 数据成员 成员函数 类型别名 常量等 class 与 struct二者都能定义类,区别主要在默认访问权限: class:默认 private struct:默认 public 例如: 1234567class A { int x; // 默认 private...




