命名空间的引入
??在C++中,名称可以是变量、函数、结构、枚举、类以及类和结构的成员。当随着项目的增大,名称相互冲突的可能性也将增加。使用多个厂商的类库时,可能导致名称冲突。
??例如,两个库可能都定义了名为List、Tree和Node的类,但定义的方式不兼容。用户可能希望使用一个库的List类,而使用另一个库的Tree类。这种冲突被称为名称空间问题。
命名空间的作用
??一个名称空间中的名称不会与另一个名称空间的相同名称发生冲突,同时允许程序的其他部分使用该命名空间中声明的东西。
??使用名称空间的主旨是简化大型编程项目的管理工作。
命名空间的使用
??使用namespace创建名称空间。
??using声明使特定的标识符可用,using编译指令使得整个命名空间可用。
??使用using声明比使用using编译指令更安全,一是当与局部名称冲突时,编译器会报错; 二是命名空间的名称可能分散在多个地方,这使得难以准确知道添加了哪些名称。
#include <iostream>
int main()
{
using namespace std;
}
命名空间解决同名函数例子
??两个函数具有相同的名字,但要输出不同的信息,就有必要使用到命名空间的概念。
源文件:dog.h
#ifndef __DOG_H__
#define __DOG_H__
namespace C{
class Dog{
private:
char *name;
int age;
public:
void setName(char *name);
int setAge(int age);
void printInfo(void);
};
void printVersion(void);
}
#endif
源文件:dog.cpp
#include "dog.h"
#include <iostream>
using namespace std;
namespace C{
void Dog::setName(char *name)
{
this->name = name;
}
int Dog::setAge(int age)
{
if (age < 0 || age > 20)
{
this->age = 0;
return -1;
}
this->age = age;
return 0;
}
void Dog::printInfo(void)
{
printf("name = %s, age = %d\n",name,age);
}
void printersion(void)
{
printf("Dog v1");
}
}
源文件:person.h
#ifndef __PERSON_H__
#define __PERSON_H__
namespace A{
class Person{
private:
char *name;
int age;
char *work;
public:
void setName(char *name);
int setAge(int age);
void printInfo(void);
};
void printfVersion(void);
}
#endif
源文件:person.cpp
#include "person.h"
#include <iostream>
using namespace std;
namespace A {
void Person::setName(char *name)
{
this->name = name;
}
int Person::setAge(int age)
{
if (age < 0 || age > 150)
{
this->age = 0;
return -1;
}
this->age = age;
return 0;
}
void Person::printInfo(void)
{
printf("name = %s, age = %d, work = %s\n", name, age, work);
}
void printVersion(void)
{
printf("Person v1\n");
}
}
源文件:main.cpp
#include "dog.h"
#Include "person.h"
int main(int argc, char **argv)
{
A::Person per;
per.setName("zhangsan");
per.setAge(16);
per.printInfo();
C::Dog dog;
dog.setName("wangcai");
dog.setAge(1);
dog.printInfo();
A::printVersion();
C::printVersion();
return 0;
}
Makefile
main.exe : dog.o person.o main.o
g++ dog.o person.o main.o -o main.exe
dog.o: dog.h dog.cpp
g++ dog.cpp -o dog.o
person.o : person.h person.cpp
g++ person.cpp -o person.o
main.o : dog.h person.h main.cpp
g++ main.cpp -o main.o
RunCode.bat
make
md output
move *.o %cd%\output
move *.exe %cd%\output
cd %cd%\output
main.exe
pause
付出积极主动
??参考文章与书籍才整理出这么一篇文章,初步了解这个概念,做出的努力就是将其真正运行一次,毕竟编程语言的规则是在运行,了解和犯错中逐渐掌握的。然后就是将其记录下来,好记性不如烂笔头。
|