281 lines
7.7 KiB
Markdown
Executable File
281 lines
7.7 KiB
Markdown
Executable File
- C++基础
|
||
- 打印hello world
|
||
- sh: 1: pause: not found
|
||
linux下出现这个因为linux无法识别system("pause")
|
||
- ```c++
|
||
#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>
|
||
- 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 <iostream>
|
||
- 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
|
||
- 演讲比系统
|
||
- 机房预约系统 |