一,命名空间(namespace)
1.名字空间可以解决函数,全局变量名字重复的问题,包在不同名字空间里的重复函数实际就是两个完全无关的函数。
2.名字空间可以嵌套,嵌套内部和外部没有任何关系。
3.名字空间允许重名,重名的 名字空间会被合并。
名字空间是用来定义作用域的。
它解决的C语言只能用文件划分作用域的缺陷。
使用using关键字可以引用一个名字空间,使得这个名字空间的所有内容对自己可见。
如果两个名字空间分别有两个相同的函数,那么我们即使同时用using引用了两个名字空间,那么也不会报错,除非我使用了这个函数(因为使用这个函数会产生歧义,不知道调用哪一个)
二.函数重载
C++允许两个同名函数同时存在,它们函数名相同,参数列表不同。
缺省参数:
函数的参数列表中,允许存在被赋值的参数,这些参数具备以下特点:
1.如果传入了,会去传入的值,如果没有传入,会取函数定义时被赋予的值(默认值)。
2.这些参数必须位于参数列表的尾部,不能穿插。
3.被赋值的参数列表不能在声明和定义时同时出现,只能出现一次。
//名字空间
#include <iostream>
using namespace std;
#include "t1.h"
using namespace t1;
namespace test {
namespace n1 {
int add(int a, int b) {
std::cout << "1\n";
return a + b;
}
}
namespace n2 {
int add(int a, int b) {
cout << "2\n";
return a + b;
}
}
}
namespace n2 {
int add(int a, int b){
cout << "3\n";
return a + b;
}
}
namespace n2{
int sub(int a, int b){
cout << "4\n";
return a - b;
}
}
int add(int a, int b){
return a + b;
}
/*
int main(){
cout << t1::add(2, 3);
return 0;
}
*/
//函数重载
#include <iostream>
using namespace std;
void func(int a, int b, int c);
void func(int a, int b = 20, int c = 30) {
cout << a << endl;
cout << b << endl;
cout << c << endl;
}
void swapArgs(int * pa, int * pb) {
int tmp;
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
void swapArgs(float * pa, float * pb) {
float tmp;
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int add(short a, short b) {
return a + b;
}
short add(short a, short b) {
return a + b;
}
int main() {
//func();
func(2);
func(3, 4);
func(5, 6, 7);
int a = 4, b = 7;
float c = 3.14, d = 1.618;
swapArgs(&a, &b);
swapArgs(&c, &d);
cout << a << " " << b << endl;
cout << c << " " << d << endl;
return 0;
}