1.命名空间
2.缺省函数
3.函数重载
1.命名空间使用namespace 关键字,主要用于解决命名冲突。命名空间可以定义变量,函数,类型,分为全部展开和部分展开:using namespace+名(全部展开),using+名::变量/函数/类型(部分展开)。
提示std是c++标准库的命名空间,使用using namespace std时,可以直接使用cout 和cin,否则还需要写std::cin/cout。
#include<iostream>
using namespace std;
namespace bit
{
// 命名空间中可以定义变量/函数/类型
int rand = 10;
int Add(int left, int right)
{
return left + right;
}
struct Node
{
struct Node* next;
int val;
};
namespace xxx
{
int rand = 1;
}
}
using namespace bit;//全部展开
using bit::Add;//部分展开
int main()
{
printf("%d\n", bit::rand);
printf("%d\n", bit::Add(1,2));
struct bit::Node node;
return 0;
}
2.缺省函数是指在函数调用时,未传递相应参数时使用的默认值。当定义一个函数时,可以为一个或多个参数指定默认值。
注意:给缺省值时必须从右往左;不允许声明和定义同时给缺省参数,只能在声明给,定义不给。
int ADD1(int a = 1, int b = 2, int c = 3)
{
return a + b + c;
}
int ADD2(int a, int b, int c=1)
{
return a + b + c;
}
int ADD3(int a, int b, int c)
{
return a + b + c;
}
int main()
{
cout << ADD1() << endl;
cout << ADD1(1, 1, 1) << endl;
cout << ADD1(1) << endl;
cout << ADD1(1, 1) << endl;
cout << ADD2(1, 1, 1) << endl;
//cout << ADD2() << endl;//错误
cout << ADD3(1, 1, 1) << endl;
return 0;
}
3.函数重载是指多个同名函数定义,这些函数的参数不同(类型不同,个数不同,顺序不同)。在编译器中,使用函数名修饰区别相同函数名的函数,较为复杂,不展开,并且不同的编译器的函数名修饰规则不同。
int Add(int left, int right)
{
cout << "int Add(int left, int right)" << endl;
return left + right;
}
double Add(double left, double right)
{
cout << "double Add(double left, double right)" << endl;
return left + right;
}
int main()
{
cout << Add(1, 1) << endl;
cout << Add(1.1, 1.1) << endl;
return 0;
}