-----------函数重载
介绍:在同一个项目中,定义的函数名可以重复
要求:函数名相同
函数的参数表不同(个数不同 或 个数相同但不同位置上的数据类型不同)
#include<stdio.h>
int func(int n)
{
}
float func()
{
}
double func(int n, float v)
{
}
int main()
{
func();
func(5);
func(5,3.0f);//系统默认小数为双精度double类型,所以加个f
return 0;
}
注意:返回值类型不影响是否构成函数重载,编译器不管返回值类型
----------引用
简而言之,就是对一个变量或者对象取的别名
格式:数据类型& 别名 = 原名;
#include<stdio.h>
int main()
{
int num = 0;
int& num1 = num;//此后,num1就是num
printf("num = %d\n", num);
printf("num1 = %d\n", num1);
num1 = 100;
printf("num1 = %d\n", num1);
return 0;
}
注意:
1.定义引用之前必须要初始化
2.引用只是一个别名,不存在单独的内存给他,上面的num和num1对应的都是同一段内存
3.引用的类型必须和被引用的变量数据类型一样
引用存在的价值:写项目时,变量名太长可使用引用
----------命名空间
介绍:命名空间是用来组织和重用代码的编译单元。
作用:
1.多人协同开发大型项目,可能会出现同一变量名代表不同的含义。代码放在一起跑时,会出现歧义。通过命名空间可以来避免冲突,解决同名问题。
形象的理解:
两所高中,它都有高一3班,那怎么区别?称呼其为“XX学校高一3班”即可,既说明了”高三一班“这个变量,又分清了是哪个学校的。
语法: namespace 命名空间名字
{
//这是命名空间的范围,可以在里面定义独属于此空间的变量(独属于此学校的高一3班)
//也可在这写函数,此函数独属于此命名空间。若声明在命名空间内,在外部实现,需加上
//此命名空间独属的标志(XX学校),如若不加,则不是同一个函数(不是此学校的高一3班)
//在外面实现使,加标志的格式:在返回值类型后,加“ 命名空间名字 ::”
}//结尾不加“ ;”
#include<stdio.h>
namespace NAME_1
{
int num = 10;
float val;
void func_1()
{
printf("func_1()\n");
}
void func_2();
namespace NAME_1_1
{
int num = 11;
}
}
void NAME_1::func_2()
{
printf("func_2()\n");
}
namespace N = NAME_1;
int main()
{
int num = 9;
printf("num = %d\n",num);//输出的是上一步定义的int num = 9; 此步输出:num = 9
//那我想要指定某个命名空间的num呢?(指定XX学校高一3班)
//这时候我需要特别的说明 要哪个命名空间(指定要哪个学校的),用 “ ::”
printf("num = %d\n", NAME_1::num);//此步输出:num = 10
printf("num = %d\n", NAME_1::NAME_1_1::num);//11
printf("num = %d\n", N::NAME_1_1::num);//11
return 0;
}
注意:
1.作用域符 ::
2.命名空间名字需取合法标识符,符合取名规则
3.可以在全局定义,也可以在局部定义(可以在一个命名空间里面再定义一个命名空间,
但使用的时候要依次使用作用域符,例子如上)。可以在命名空间里面定义命名空间,
但是!不能在函数里面定义命名空间。
4.若出现两个命名空间名字相同,则说明这两个命名空间里面的内容合起来同属于一个命名空间(当前名字重复的哪个命名空间),都可以用此命名空间名+::去访问到
用处:可以在不同的地方去完善命名空间
5.命名空间也可以取别名(当命名空间过长或不好记忆时不妨取个别名),
使用别名时要在取完别名后,有先后顺序,不然编译器不清楚这个别名