命名空间
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字
污染 。
命名空间定义:
namespace name //name就是命名空间的名字
{
int i = 10;
int j = 20;
int add(int a, int b){ //也可以定义函数;
return a + b;
}
}
一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
补充1.命名空间可以嵌套。
补充2.同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中 。
补充3.一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中 。
命名空间的三种使用方法:
1.加命名空间名称及作用域限定符
int main(){
printf("%d", name::i);
return 0;
}
2.使用using将命名空间中成员引入
using name::j;
int main(){
printf("%d",j);
return 0;
}
3.使用using namespace 命名空间名称引入
using namespace name;
int main(){
printf("%d,%d",i,j);
return 0;
}
缺省函数
缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参 。
缺省分为两类:
1.全缺省。
int add(int a = 10, int b = 20)
2.半缺省。
int add(int a, int b = 10)
注意1.半缺省参数必须从右往左依次来给出,不能间隔着给。
注意2.缺省参数不能在函数声明和定义中同时出现 。
注意3.缺省值必须是常量或者全局变量。
注意4.C语言不支持缺省函数。
重载函数
C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的
形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题 。
构成重载的条件:
1.函数名相同。
2.参数的个数或者类型不相同。
例如:
int func(int a, int b); //原函数
//以下都是重载函数
int func(double a,double b);
int func(char c);
double func(double a, int b);
注意:函数的重载与返回值类型无关。
针对这个函数 int add(int a,int b)
g++在编译后,函数修饰后的名字就变成了函数名加上参数类型,如这样<_Z1addii>.
而gcc编译后变成了<_Z2add>.
如上所述就是C++支持函数重载的原因。
extern “C”
在函数前加extern “C”,意思是告诉编译器,将该函数按照C语言规则来编译 。
例如:
extern "C" int add(int a, int b){
return a + b;
}