Files
logseq-1/pages/黑马C++课程.md
2024-06-17 22:24:52 +08:00

7.7 KiB
Raw Permalink Blame History

  • 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"
      • 布尔类型
        • 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
    • 演讲比系统
  • 机房预约系统