initial commit
This commit is contained in:
281
pages/黑马C++课程.md
Normal file
281
pages/黑马C++课程.md
Normal file
@@ -0,0 +1,281 @@
|
||||
- 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
|
||||
- 演讲比系统
|
||||
- 机房预约系统
|
||||
Reference in New Issue
Block a user