关于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; }; };
#endif
|
实现命名空间中的成员函数
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; }; };
|
使用命名空间中的成员函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include "human.h"
using namespace myphp;
int main(int argc, char const *argv[]) { 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; }
|