1、命名空间
在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用 域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
1.1 命名空间的定义
namespace n1
{
int add(int a, int b)
{
cout << "1\n";
return a + b;
}
}
函数还是那个函数只是它的作用域改变了,此时如果想调用这个函数直接在主函数里面调用肯定是不行了,有两种方法。
一种是cout<< n::add(3,4); 一种是using namespace n1 将命名空间n1放开,使它全局可见。
在这里讲一下:: 它的含义是作用域限定符,左边是命名空间名后面是空间里的内容,所以嵌套的也很好调用
1.1.1命名空间的嵌套
namespace N2
{
int a;
int b;
int Add(int left, int right)
{
return left + right;
}
namespace N3
{
int c;
int d;
int Sub(int left, int right)
{
return left - right;
}
}
}
1.1.2 同一个文件当中,有多个同名的命名空间也没有关系,编译器会自动将里面的内容合并,但是内容不能重名。
有一个很别致的问题 https://blog.csdn.net/weixin_43447989/article/details/100079196
1.2 命名空间的意义
1、名字空间可以解决函数、全局变量名重复的问题,包在不同的名字空间里的重复函数实际就是两个完全无关的函数。
2、名字空间允许嵌套,嵌套内部和外部没有任何关系。
3、名字空间允许重名,重名的名字空间会被合并。 名字空间是用来定义作用域的。 它解决了C语言中只能用文件划分作用域的缺陷。 使用using关键字,可以引用一个名字空间,使得这个名字空间内的所有内容对自己可见。 如果两个名字空间里分别有相同的两个函数,那么即使我同时用using引用了两个名字空间,那么也不会报错,除非我使用了这个函数(因为使用函数会产生歧义,也就是不知道该调哪个)。
2、缺省参数
void func(int a , int b , int c=158)
{
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
int main()
{
func(2,3);
func(1,2,3);
func(23,0);
}
2.1、缺省参数是指,函数的参数列表可以赋初值的情况,调用函数是编译器会自动按照参数的个数来给参数赋值。
如果实参存在那么传入实参的内容,如果实参不存在使用默认内容。
2.2、缺省参数的分类
2.1.1
void TestFunc(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
2.2.2半缺省参数
void TestFunc(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
注意:
1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现
3、函数重载:
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形 参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题
void swapown(int *p, int*b)
{
int tmp;
tmp = *p;
*p = *b;
*b = tmp;
}
void swapown(float *p, float*b)
{
float tmp;
tmp = *p;
*p = *b;
*b = tmp;
}
int main()
{
int a = 1,b = 2;
float c = 3.14, d = 5.62;
swapown(&a, &b);
swapown(&c, &d);
cout << a << endl;
cout << b << endl;
cout << c << endl;
cout << d << endl;
}