#include
#include //意思是复制粘贴iostream到当前文件
#include它的功能就是复制粘贴
这里 ,尖括号是系统某个目录下的,自己项目中的一般是用""来匹配目录,其实都一样,这里iostream是个没有后缀名的文件,用于和C语言的库进行区分
头文件
首先了解下面一个场景
Main.cpp
#include <iostream>
int main() {
Log("hello world!");
std::cin.get();
}
Log.cpp
void Log(const char* message) {
std::cout << message << std::endl;
}
上面代码Main.cpp中会报错,找不到Log,需要在Main.cpp添加Log函数的声明进行修复
Main.cpp
#include <iostream>
void Log(const char* message);
int main() {
Log("hello world!");
std::cin.get();
}
从上面的场景就发现在Main.cpp文件中一直需要声明,比较繁琐,那头文件就是用来做这个事情
新建文件Log.h
Log.h
#pragma once
void Log(const char* message);
其他两个文件分别为
Log.cpp
#include <iostream>
void Log(const char* message) {
std::cout << message << std::endl;
}
Main.cpp
#include <iostream>
#include "Log.h"
int main() {
Log("hello world!");
std::cin.get();
}
上面发现有个#pragma once,这是用来干啥的,它其实类似下面语句的使用 ,为了预防头文件被include的时候重复定义
#ifndef XXXX
#define XXXX
void Log(const char* message);
#endif
指针
指针是一个存储变量地址的整型数,是int类型
int var = 8;
int* ptr = &var;// 取到var的指针ptr,&是取址符
*ptr = 10;// *ptr是逆向获取该指针指向变量的值
注意这里出现了三个新东西
1.int* 指针声明
2.&var取var的指针地址
3.*ptr取指向指向变量的值
引用
不占内存,就是个别名
int a = 5;
int& ref = a;// 注意这里&和指针里面的取址符&不是一个东西
注意这里出现了一个新东西
1.int& 声明引用
下面有个函数参数引用传递的案例
使用指针实现改变a的值
void test(int* value){
(*value)++;
}
int main(){
int a = 5;
test(&a);
}
使用引用实现,发现简化了很多,发现引用是指针的语法糖
void test(int& value){
value++;
}
int main(){
int a = 5;
test(a);
}
static
类和结构体外的static
下面代码编译的时候会报错int data 已经在main.obj中定义了
Main.cpp
#include <iostream>
int data = 10;
int main(){
}
Static.cpp
int data = 10;
可以改Main.cpp文件,extern关键字表示可以从外部找data变量
#include <iostream>
extern int data;
int main(){
}
也可以改Static.cpp文件,加上静态的话意思别的翻译单元看不见这个值了,有点类中私有变量的感觉
static int data = 10;
Class
Main.cpp
class Test{
}
int main(){
Test t;// 栈上创建
Test* t2 = new Test();// 堆上创建,返回地址,不用需要手动delete t2进行销毁
}
new关键字
表示在堆上创建对象并返回地址
TODO