【c++】命名空间、函数重载、缺省参数

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;
}

3.1 C++允许函数名相同的函数存在,但是他们的参数列表必须不同,此时他们互为重载函数,函数在调用时会根据实参的变量类型来决定调用哪个函数。

3.2 C++允许两个重名函数同时存在,但他们的参数列表不能完全相同,哪怕返回值类型不同也不可以。函数返回值类型不能作为函数重载的条件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值