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++_拷贝控制
拷贝控制当定义一个类时,实际上也在定义: 对象如何拷贝 如何赋值 如何移动 如何销毁 这些由一组特殊成员函数控制,称为: 拷贝控制成员共 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...
C++_函数
函数函数是一个命名的代码块,通过调用执行。 函数可以: 有 0 个或多个参数 通常返回一个结果 支持重载:同名、不同参数列表 函数基础一个典型函数由以下部分组成: 返回类型 函数名 形参列表 函数体 例如: 123int add(int a, int b) { return a + b;} 函数调用通过调用运算符 () 调用函数: 1int sum = add(1, 2); 调用函数时会发生两件事: 用实参初始化形参 控制权转移到被调函数 函数执行结束后,再返回主调函数继续执行。 形参和实参 形参:定义在函数中的参数 实参:调用函数时提供的值 12int add(int a, int b); // a、b 是形参add(3, 4); // 3、4 是实参 说明: 实参数量必须与形参数量匹配 实参类型要与形参类型匹配,或能转换 函数实参的求值顺序一般未规定 空形参列表没有参数的函数也必须写圆括号: 12void f1() { }void f2(void) { } 两种...




