条件:通过命名空间和域运算的实现
命名空间的好处:解决了不同工程师定义了相同的类名,避免了冲突,例如:
工程师1命名了一个类叫person,而工程师2也定义了一个类person,此时类就会同名,引入命名空间,避免了这种冲突
代码关系梳理:
命名空间A定义了animal类和person类;命名空间P定义了person类
1、在命名空间A定义animal类和person类的头文件
#ifndef __ANIMAL_H__ #define __ANIMAL_H__ #include <stdio.h> namespace A{ class Animal{ private: char *name; int age; public: void setName(char *name); void setAge(int age); void printInfo(void); }; class Person{ private: char *name; int age; public: void setName(char *name); void setAge(int age); void printInfo(void); }; } #endif
2、在命名空间A实现animal类和person类中的方法
#include "animal.h" namespace A{ void Animal::setName(char *name) { this->name = name; } void Animal::setAge(int age) { this->age = age; } void Animal::printInfo(void) { printf("Animal : name is %s,age is %d\n",this->name,this->age); } void Person::setName(char *name) { this->name = name; } void Person::setAge(int age) { this->age = age; } void Person::printInfo(void) { printf("Person is specific animal : name is %s,age is %d\n",this->name,this->age); } }
3、在命名空间P定义person类的头文件
#ifndef __PERSON_H__ #define __PERSON_H__ #include <stdio.h> namespace P{ class Person{ private: char *name; int age; public: void setName(char *name); void setAge(int age); void printInfo(void); }; } #endif
4、在命名空间P实现person类中的方法
#include "person.h" namespace P{ void Person::setName(char *name) { this->name = name; } void Person::setAge(int age) { this->age = age; } void Person::printInfo(void) { printf("Person : name is %s,age is %d\n",this->name,this->age); } }
5、在主函数中使用命名空间和类
#include "person.h" #include "animal.h" using namespace A; using namespace P; int main(int argc,char**argv) { P::Person stu; A::Animal dog; stu.setName("mingming"); stu.setAge(20); stu.printInfo(); dog.setName("xiaogou"); dog.setAge(2); dog.printInfo(); A::Person child;//命名空间A中的Person类 child.setName("xiaobudian"); child.setAge(0); child.printInfo(); return 0; }
6、使用Makefile编译
#生成可执行文件person,依赖于文件 main.c和person.c # 符号的意义: $@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件 main:main.o person.o animal.o g++ -o $@ $^ %.o : %.cpp g++ -c -o $@ $< clean: rm -rf *.o main
使用命名空间的好处是每个工程师都可以定义自己的命名空间,避免了大量的类导致重名的问题