C/C++代码中,存在大量的变量、函数和类,对于他们的命名,难免会出现重复的情况,导致代码执行出错。所以,C++设计了命名空间来解决上述问题。
一个命名空间会形成一个域,每个域里面的数据都是相互独立的,数据只属于定义自己的命名空间。
举个生活中简单的例子:
使用命名空间,首先要会定义,命名空间的定义方法如下:
namespace(关键字)+ (命名空间名称) + {(命名空间中的内容)}。
举例如下:
a.普通命名空间
//普通命名空间
namespace test1 //该命名空间名称为 test1
{
//变量、函数和类在此定义
int a = 0;
int add(int m, int n)
{
return m + n;
}
}
b.嵌套命名空间
//嵌套命名空间
namespace test2 //该命名空间名称为 test2
{
int a = 0;
int Add(int m, int n)
{
return m + n;
}
//在命名空间 test2中再定义一个命名空间 test3
namespace test3
{
int c;
int d;
int Sub(int m, int n)
{
return m - n;
}
}
}
c.在同一个工程中定义多个相同的命名空间,编译器最后会将它们合成为同一个命名空间
//两个test1最后会合成为一个test1
namespace test1
{
int a = 0;
int add(int m, int n)
{
return m + n;
}
}
namespace test1
{
int b = 0;
int sub(int m, int n)
{
return m - n;
}
}
a.方法一:(域名)+ :: (域作用限制符)+(要使用的变量或函数名)
namespace test1
{
int a = 0;
int add(int m, int n)
{
return m + n;
}
}
int main()
{
int ret = test1::add(1, 2); //ret要获取命名空间test1中函数add()的返回值,要使用方法一。
return 0;
}
b.方法二:将命名空间中要使用的变量或函数单独展开在全局域中:using +(命名空间名)+ :: + (要使用的变量或函数名)
namespace test1
{
int a = 0;
int add(int m, int n)
{
return m + n;
}
}
using test1::add; //在这里将命名空间test1中函数add展开,主函数中就可直接使用
int main()
{
int ret = add(1, 2);
return 0;
}
c.方法三:将命名空间全部展开到全局域中,命名空间中所有数据都可直接使用:using namespace + (命名空间名)
namespace test1
{
int a = 0;
int add(int m, int n)
{
return m + n;
}
}
using namespace test1; //将命名空间test1整个展开到全局域中
int main()
{
int ret = add(1, 2);
return 0;
}
//cin/cout在库和std命名空间中,所以必须写上
#include
using namespace std;
int main()
{
int a = 0;
cin >> a; //从键盘向变量a中输入
cout << "Hello world!!!" << endl; //输出Hello world,endl为换行
system("pause");
return 0;
}
cout/cin相比printf()/scanf() 的优点:
a.可自动识别类型,控制输入输出格式
b.可连续输出在同一行
例如下:
int main()
{
int a;
double b;
char c;
cout << "please input :" << endl;
cin >> a >> b >> c;
cout << a << " " << b << " " << c << endl;
return 0;
}
女神有备胎,C++中有的函数参数也会有备胎,这种参数就叫做缺省参数。
函数在声明或定义时为参数设置了默认值。
在调用该函数时,如果不传参,则会使用该函数的缺省参数。
例如下:
int testFunc(int a = 1, int b = 2)
{
return a + b;
}
int main()
{
int ret = testFunc();
cout << "未传参数时结果为:" << ret << endl;
ret = testFunc(10,6);
cout << "传入参数时结果为:" << ret << endl;
return 0;
}
缺省参数不能在函数声明和定义时同时出现
a.全缺省参数
void testFunc(int a = 1, int b = 1,int c=1)
{
cout << "a = " << a << " b = " << b << " c = " << c << endl;
}
int main()
{
testFunc();
testFunc(2);
testFunc(2,3);
testFunc(2,3,4);
return 0;
}
void testFunc(int a, int b = 1,int c=1)
{
cout << "a = " << a << " b = " << b << " c = " << c << endl;
}
int main()
{
testFunc(2);
testFunc(2,3);
testFunc(2,3,4);
return 0;
}