C++ 基础
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头文件
void Log(const char* message);
//一个引用.cpp文件
int main() {
Log("test");
}头文件中只能声明不能定义方法。
如果实在有这个情况那么要禁重复头文件载入。
头文件
- .h结尾的文件代表头文件
- 需要使用#Include <>来引入
- 可以将方法头写在头文件中
#pragma once
在头文件顶部加入使头文件只复制一次
关键概念指针
指针标记
*
,在任何类型后加*
就是引用标记,如int*
在一个指针前加
*
是指获得其值*value
取地址服
&
在任何对象前加入&
就是取得地址 :&int
空指针
使用
nullptr
指向空指针多级指针
int**
来声明多级指针
引用
和指针很类似是指针的高级分装
引用标记
与指针标记的使用相似,
区别在于使用引用时做如下操作
使用引用
1
2
3
4
5
6int 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
9class Human {
public:
int x=0;
int y=0;
void Move() {
x = x + 1;
y = y + 1;
}
};与java的异同
- 使用class关键字和JAVA没什么区别,注意反括号要加入分号
};
- 另外
public
的位置也不一样 - C++的类中的默认值需要指定否则int的默认值也不是0
- 使用class关键字和JAVA没什么区别,注意反括号要加入分号
使用指针创建的对象
1
2
3Human* 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
3static 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的成员变量。不能操作实例化的成员变量。