程序生成的过程:
1.预处理:
头文件的展开
宏的替换
预处理指令解析
去掉注释
2.编译:预处理后文件 生成汇编文件 .asm(汇编代码)
词法解析,语法解析 语义分析 优化
3.汇编:汇编文件进一步处理,生成目标机器指令(二进制文件.obj)
4.链接:将多个目标文件(库文件)链接生成可执行程序(.exe,.out)
函数参数可以指定默认值,从左往右依次指定,不能间断
如果函数声明定义分开,在函数声明出指定默认值即可
函数重载:在同一个作用域下,函数名相同,参数列表不同(参数的类型,数量,顺序)的多个函数之间
编译器可以根据参数自动识别
重载和重写的区别
(1)范围区别:重写和被重写的函数在不同的类中,重载和被重载的函数在同一类中。
(2)参数区别:重写与被重写的函数参数列表一定相同,重载和被重载的函数参数列表一定不同。
(3)virtual的区别:重写的基类函数必须要有virtual修饰,重载函数和被重载函数可以被virtual修饰,也可以没有。
引用 :对已经存在的一块空间起别名
二者属于一个东西
定义了必须要初始化,指向一块空间(不能空引用)
引用
相当于给一个人取绰号 前提是有这个人存在,当起过绰号后,你喊出绰号,那个人也知道是在叫自己
1.引用定义就要初始化,指针可以不用初始化
2.引用一旦引用某个空间,就不能引用其他空间,指针可以修改其指向的空间
3.有空的指针,没有空的引用
4.引用不会额外开辟空间,指针会开辟存储地址的空间。
5.指针可以有多级,引用不能有多级
int a = 2;
int &b = a;//这里不是去地址,而是引用
这里面b的值就是2
除此之外,若在函数中使用引用作为参数,如下实例:将 a 当实参传给函数 func,x 为函数 func 的形参且为引用,
在函数 func 中 x 被赋予了新的值 3,于是 a 的值也跟着变为 3。
#include <iostream>
using namespace std;
int func(int &x)//函数func将引用当作形参
{
x=3;
return 0;
}
int main ()
{
int a=1;//声明整型变量
func(a);////给函数func传参
cout<<"a的值为: "<<a<<endl;//输出a的值,结果为“a的值为3”
return 0;
}
nullptr 和NULL的区别
1.nullptr 关键字 ,NULL宏 替换整形0
2.含义不同 nullptr空指针 NULL是整形0
3.为什么c++要引入nullptr