C++ 命名空间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// C++ 的标准输入,输出头文件
#include<iostream>

// 标准命名空间
// 当引入该命名空间后,我们就可以直接调用其中的函数,省略掉前缀
using namespace std;

// 命名空间类似于Java中的包,通过命名空间,允许我们在不同的命名空间中,定义同名
// 的变量和函数
// 命名空间可以用来归类同一种类型的函数和变量;
// Java中的包允许有别的包,同样命名空间中也允许别的命名空间
namespace NSP_A{
int a = 9;

namespace NSP_AA{
int a = 100;
}
}
namespace NSP_B{
int a = 8;

// 定义结构体
struct Human{
char* name;
};
}

int main(){

// C++下的标准输入输出
// 其中,std是标准输入输出的命名空间;
// cout是其中定义的函数
// << 则是该命名空间中重载的输出操作符
//std::cout << "this is C plus plus!" << std::endl;
// :: 访问修饰符,相当于Java中的.
cout << "no namespace C plus plus!" << endl;

// 命名空间使用
cout << NSP_A::a << endl;
cout << NSP_A::NSP_AA::a << endl;

// 使用命名空间中的结构体
NSP_B::Human h = {"Adam"};

using namespace NSP_B;
// C++中,结构体允许省略前面的struct
struct Human human = { "Lili" };
Human human = {"Lili"};

system("pause");
}

C++中也是存在内部类的,而且内部类的作用和使用与命名空间非常类似;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Err{
public:
// 定义一个范畴内的多种异常
class MyException2{
public:
MyException2(){}
};
};

void myThrow4(){
// 抛出内部类异常
// 这种写法不一定是命名空间,C++中也是有内部类的
throw Err::MyException2();
}