7.7 KiB
7.7 KiB
- C++基础
- 打印hello world
- sh: 1: pause: not found linux下出现这个因为linux无法识别system("pause")
-
#include <iostream> // linux need this to use pause #include <unistd.h> 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"
- C 风格
- 布尔类型
- 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"
- 在头文件中写函数的声明
- 在源文件中写函数的定义
- 创建后缀名为.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){}
- 通讯录管理系统
- 打印hello world
- C++核心编程,面向对象编程
- 内存分区模型
- 代码区:存放函数体的二进制代码,由操作系统管理
- 全局区:存放全局变量和静态变量及常量
- 栈区:由编译器自动分配释放,存放函数的参数值,局部变量等
- 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收
- 不同的区域存放的数据,赋予不同的生命周期,给我们更大的编程灵活性
- 运行前
- 编译后,生成exe,未执行前分为两个区域
- 代码区:
- 存放CPU机器指令
- 共享的,对于频繁执行的程序,内存中只需要有一份代码
- 只读的,防止其他程序修改
- 全局区
- 全局变量和静态变量
- 包含常量区,存放字符串常量和其他常量
- 该区域数据程序结束后由操作系统释放
- 运行后
- 栈区
- 存放函数参数值,局部变量等
- 不要返回局部变量的地址,栈区的地址由操作系统开辟和释放
- 堆区
- 由程序员分配,手动释放利用操作符delete
- delete a
- delete[] arr
- 主要利用new在堆区开辟内存
- new 数据类型,创建后会返回该数据对应的数据指针
- 由程序员分配,手动释放利用操作符delete
- 栈区
- 引用
- 本质是一个指针常量
- 数据类型 &别名 = 原名
- 引用必须初始化
- 引用在初始化后,不可以改变
- 用作函数参数
- 可以让形参修饰实参
- 可以简化指针修改实参
- 作为函数返回值
- 不要返回局部变量的引用
- 函数的调用可以作为左值
- 常量引用
- 修饰形参数,防止误操作
- 函数默认参数
- 返回值类型 函数名 (参数 = 默认值) {}
- 如果某个位置已经有了默认参数,那么从这位置开始后面的都要有
- 函数声明有默认参数,函数实现就不能有默认参数,声明和实现只能有一个默认参数
- 函数占位参数
- 返回值类型 函数名 (数据类型){}
- 占位参数也可以有默认参数
- 函数重载
- 函数名相同,参数不同
- 引用作为重载条件
- 函数重载碰到函数默认参数
- 类和对象
- 封装
- 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
- 演讲比系统
- 机房预约系统