C++命名空间的使用

关于C++命名空间

命名空间主要作用是为了防止不同库之间相同成员函数冲突的问题,就像有两个同名的人,我们需要二外使用一些信息把两个人区分开,C++应用程序中也会出现同样的情况。例如,你可能正在编写一些具有名为 hell 的函数的代码,并且还有另一个可用的库,它也具有相同的 hello函数。现在编译器无法知道您在代码中引用的 hello 函数的哪个版本。

声明命名空间

命名空间使用 namespace 关键字进行声明,首先在头文件中进行声明。

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
#ifndef __MYPHP_HUMAN_H__
#define __MYPHP_HUMAN_H__

#include <iostream>

namespace myphp
{
class Human
{
public:
Human()
{
std::cout << "Human->construct" << std::endl;
};
~Human()
{
std::cout << "Human->destruct" << std::endl;
};

public:
void setSex(int s);
int getSex();
void setAge(int a);
int getAge();

private:
int sex;
int age;
};
}; // namespace myphp

#endif // __MYPHP_HUMAN_H__

实现命名空间中的成员函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "human.h"

namespace myphp
{
void Human::setSex(int s)
{
sex = s;
};

int Human::getSex()
{
return sex;
};

void Human::setAge(int a)
{
age = a;
};

int Human::getAge()
{
return age;
};
}; // namespace myphp

使用命名空间中的成员函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "human.h"

// 声明使用的 namespace
using namespace myphp;

int main(int argc, char const *argv[])
{
// 头部声明 namespace
Human human;
// 头部未声明 namespace
// myphp::Human human;
human.setAge(18);
human.setSex(0);
std::cout << "human.age: " << human.getAge() << std::endl;
std::cout << "human.sex: " << human.getSex() << std::endl;

return 0;
}