C++ 基础

辅助(外挂)开发课程

前置

  • 安装VISUAL 2019

    包含C++和MAT

  • 创建一个项目

结构和VS的使用

  • 点击DEBUG后会在项目中创建Debug目录其中有EXE文件

    如果想执行EXE并且让他不关闭的话需要加一个输入等待。

概念

编译流程

cpp 编译>> obj 连接后>> 得到exe

  • 编译

    找到cpp文件的东西变成obj

    会做词法分析、语法分析、优化、构建抽象语法树、翻译成机器语言。

    细节过程
    • 预处理

      可以开启到预处理文件。通过它可以看到预处理文件里写的什么。

  • 连接

    • 连接重复定义,有多个相同方法会使得连接过程产生报错。

      所以挡我引入一个头文件,而头文件中有一个方法是非static的会经常导致这个we你。所以.h 的头文件中的方法必须是static的否则多次引入会导致连接错误。

      • 解决重复定义最好的方式是头文件只是声明,在其他文件中实现。
      1
      2
      3
      4
      5
      6
      7
      8
      //一个.h头文件
      #pragma once
      void Log(const char* message);
      //一个引用.cpp文件
      #include "log.h"
      int main() {
      Log("test");
      }
    • 头文件中只能声明不能定义方法。

      如果实在有这个情况那么要禁重复头文件载入。

头文件

  • .h结尾的文件代表头文件
  • 需要使用#Include <>来引入
  • 可以将方法头写在头文件中
  • #pragma once 在头文件顶部加入使头文件只复制一次

关键概念指针

  • 指针标记

    *,在任何类型后加*就是引用标记,如int*

    在一个指针前加*是指获得其值 *value

  • 取地址服

    & 在任何对象前加入& 就是取得地址 :&int

  • 空指针

    使用 nullptr指向空指针

  • 多级指针

    int** 来声明多级指针

引用

和指针很类似是指针的高级分装

  • 引用标记

    与指针标记的使用相似,

    区别在于使用引用时做如下操作

    使用引用

    1
    2
    3
    4
    5
    6
    int b = 9;
    int& = b//声明引用
    void (int& a)//声明使用引用入参
    {
    a +=1 ; //正常使用
    }

    使用指针

    1
    2
    3
    4
    5
    6
    7

    //指针
    int b =9;
    int* a = &b;
    void (int* a){
    *a +=1;
    }

  • 定义

    例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Human {
    public:
    int x=0;
    int y=0;
    void Move() {
    x = x + 1;
    y = y + 1;
    }
    };

    与java的异同

    • 使用class关键字和JAVA没什么区别,注意反括号要加入分号 };
    • 另外public 的位置也不一样
    • C++的类中的默认值需要指定否则int的默认值也不是0
  • 使用指针创建的对象

    1
    2
    3
    Human* h2 = &h1;
    h2->Move();
    printf("%d,%d\n", h2->x, h2->y);

构造函数

  • 与JAVA中相同创建一个同名于类的方法。

  • 创建一个带参的同名方法。

  • 实例化时与JAVA不同

    java

    1
    Human human = new Human(1);

    C++

    1
    Human human2(100);

析构函数

用于自动释放类中资源的函数。

  • 创建方法

    ~类名

    1
    2
    3
    ~Human(){
    std::cout << "Huma is destroyed!" << std::end1;
    }
  • 析构函数可以主动调用,不过我们调用之后自动还是会调用.

C++中的数据类型

  • char 是个ascii 的一个字节的数字。

  • bool 一个字节。false or true。

  • int 四个字节。最大值 2^31-1。

    unsigned 的情况下最大值是 2^32-1

  • float 浮点 默认情况下是double数字只有在值后加f才是float

  • double 双精度 8个字节

语法学习

  • #include 引入包

  • #define 重命名

  • :: 调用方法替代JAVA中的.

  • #if 预处理时是否对她进行编译,可以作为注释、或判断系统时使用

  • static 关键词

    1
    2
    3
    static void LogTest(){
    Log("Hello world!");
    }

    像这样使用static能够让一个函数不进行连接。

    static 告诉了编译器这个函数只属于当前翻译的作用域。

  • inline 关键字

    会在连接时直接调用调用地址。这样实际上就不存在这个函数的声明。

  • unsigned 关键字

    提出负数

  • 循环

    while和for与java一样

  • extern

    在声明一个方法需要到外部文件中连接时,其实前面就暗含了一个extern关键字,其意义就是要到外部文件中访问。

    • 访问全局变量
  • static

    • 在类中 static必须是常量 所以必须加const 关键词在static后;

    • 如果想设置一个可变常量。需要在类外面定义和写入。

      1
      int Phone::version = 100;
    • static 方法和java差不多,static 方法只能操作static的成员变量。不能操作实例化的成员变量。