- C++基础 - 打印hello world - sh: 1: pause: not found linux下出现这个因为linux无法识别system("pause") - ```c++ #include // linux need this to use pause #include using namespace std; // main is the enter of program and only have one int main() { cout << "hello world" << endl; // console pause pause(); // linux can not use this // system("pause"); return 0; } ``` - 注释 - 使用//进行单行注释 - 使用/* xxxx */进行多行注释 - 定义变量 - 数据类型 变量名 = 初始值; - 定义常量 - \#include 常量名 常量值 - const 数据类型 变量名 = 初始值; - 关键字 - int - sizeof - 统计数据类型所占用内存大小 - …… - 标识符命名规则 - 不能是关键字 - 只能由字母,数字,下划线组成 - 第一个字符必须为字母或下划线 - 标识符字母区分大小写 - 数据类型 - 整型 - short - int - long - long long - 实型(浮点型) - 默认情况下输出小数会显示6位小数 - float - double - 字符型 - char - 转义字符 - \\n - \\r - \\\\ - \\t - 字符串型 - C 风格 - char str[] = "hello world" - C++风格 - \#include - string str = "hello world" - 布尔类型 - true - false - 数据输入 - cin >> 变量 - 运算符 - 算术 - 赋值 - = - += - -= - *= - /= - %= - 比较 - == - != - < - > - <= - \>= - 逻辑 - ! - && - \|\| - 流程结构 - 选择结构 - if - 三目运算符 - 表达式1 ? 表达式2 : 表达式3 - switch语句 - 循环结构 - while - do while - for - 跳转语句 - break - continue - goto - 无条件跳转语句 - goto 标记;执行goto时会跳转到标记的位置 - 标记使用`FLAG:`来表示 - return - 数组 - 每个元素都是相同数据类型 - 由连续内存位置组成 - 数据类型 数组名[数组长度]; id:: 651fcf37-7dfb-4db4-9a8d-12dbf5ab7d41 - 数据类型 数组名[数组长度] = {值1,值2,值3……} - 数据类型 数组名[] = {值1,值2,值3……}; - 查看元素地址 - cout << (int) &arr[0] << endl; - 二维数组 - 函数 - 返回值类型 函数名 (参数列表) { 函数体语句 return表达式 } - 值传递 - 函数的形参发生改变,并不会影响实参 - 样式 - 无参无返 - 无参有返 - 有参无返 - 有参有返 - 声明 - 函数的声明可以有多次,但是定义只能有一次 - 声明可以提前告诉编译器函数的存在 - 分文件编写 - 创建后缀名为.h的头文件 - \#include - using namespace std; - 创建后缀名为.cpp的源文件 - \#include "swap.h" - 在头文件中写函数的声明 - 在源文件中写函数的定义 - 指针 - 通过指针间接访问内存 - 数据类型 * 指针变量名; - p = &a; - 解引用 - 通过指针前加*可以找到指针指向内存中的数据 - 32位系统4个字节,64位系统8个字节 - 空指针 - 指针变量指向内存变量中编号为0的空间 - 用于初始化指针变量 - int * p = NULL; - 空指针指向的内存是不可以访问的 - 野指针 - 指向非法的内存空间 - int * p = (int *)0x1100; - const修饰 - 常量指针 - const int * p = &a; - 指针的指向可以修改,但是指向的值不可以修改 - 指针常量 - int * const p = &a; - 指针的指向不可以修改,但是指向的值可以修改 - 即修饰指针,又修饰常量 - const int * const p = &a; - 指针的指向和指向的值都不可以修改 - 指针和数组 - int * p = arr - p++可以指向下一个元素 - 作为函数参数时,可以修改实参的值 - swap(int *p1, int *p2){} - swap(&a, &b); - 结构体 - 用户自定义的数据类型,允许用户存储不同的数据类型 - struct 结构体名 { 结构体成员列表 }; - 结构体数组 - struct 结构体名 数组名[元素个数] = {{},{},{}……} - 结构体指针 - 利用 -> 可以通过结构体指针访问结构体属性 - student * p = &s; - p->name - 作为函数参数 - 值传递 - 地址传递 - 改为指针可以减少内存空间,且不会复制新的副本 - 使用const防止误操作 - 加入const,有修改的操作就会报错 - void printStudent(const student *s){} - 通讯录管理系统 - C++核心编程,面向对象编程 - 内存分区模型 - 代码区:存放函数体的二进制代码,由操作系统管理 - 全局区:存放全局变量和静态变量及常量 - 栈区:由编译器自动分配释放,存放函数的参数值,局部变量等 - 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 - 不同的区域存放的数据,赋予不同的生命周期,给我们更大的编程灵活性 - 运行前 - 编译后,生成exe,未执行前分为两个区域 - 代码区: - 存放CPU机器指令 - 共享的,对于频繁执行的程序,内存中只需要有一份代码 - 只读的,防止其他程序修改 - 全局区 - 全局变量和静态变量 - 包含常量区,存放字符串常量和其他常量 - 该区域数据程序结束后由操作系统释放 - 运行后 - 栈区 - 存放函数参数值,局部变量等 - 不要返回局部变量的地址,栈区的地址由操作系统开辟和释放 - 堆区 - 由程序员分配,手动释放利用操作符delete - delete a - delete[] arr - 主要利用new在堆区开辟内存 - new 数据类型,创建后会返回该数据对应的数据指针 - 引用 - 本质是一个指针常量 - 数据类型 &别名 = 原名 - 引用必须初始化 - 引用在初始化后,不可以改变 - 用作函数参数 - 可以让形参修饰实参 - 可以简化指针修改实参 - 作为函数返回值 - 不要返回局部变量的引用 - 函数的调用可以作为左值 - 常量引用 - 修饰形参数,防止误操作 - 函数默认参数 - 返回值类型 函数名 (参数 = 默认值) {} - 如果某个位置已经有了默认参数,那么从这位置开始后面的都要有 - 函数声明有默认参数,函数实现就不能有默认参数,声明和实现只能有一个默认参数 - 函数占位参数 - 返回值类型 函数名 (数据类型){} - 占位参数也可以有默认参数 - 函数重载 - 函数名相同,参数不同 - 引用作为重载条件 - 函数重载碰到函数默认参数 - 类和对象 - 封装 - class 类名 { 访问权限: 属性/行为 }; - public - protected - private - 和struct的区别 - struct默认权限为公共 - class默认权限为私有 - 成员属性私有化 - 可以控制读写权限 - 可以检测数据有效性 - 继承 - 多态 - 初始化和清理 - 构造函数 - 类名(){} - 可以重载 - 有参构造和无参构造 - 普通构造和拷贝构造 - Person(const Person &p){} - 调用方法 - 括号法 - Person p1; - Person p2(10); - Person p3(p2); - 显示法 - Person p1; - Person p2 = Person(10); - 隐式转换法 - Person p2 = 10; - Person p2 = p2; - 析构函数 - ~类名(){} - 没有参数,不能重载 - - 职工管理系统 - C++提高编程 - 泛型编程,STL - 演讲比系统 - 机房预约系统