命名空间就是为了避免在不同的文件中使用相同的变量名、函数名、类名而发生冲突。c++中使用自定义的命名空间例子如下:
person.h
#ifndef PERSON_H
#define PERSON_H
#include <iostream>
namespace person_space
{
class Person
{
public:
int ID;
public:
Person();
Person(int id);
virtual ~Person();
virtual const int get_num(){return num;}
static int num;
};
class Child : public Person
{
public:
Child(){num++;}
virtual ~Child(){num--;}
virtual const int get_num(){return num;}
private:
static int num;
};
class Adult : public Person
{
public:
Adult(){num++;}
virtual ~Adult(){num--;}
virtual const int get_num(){return num;}
private:
static int num;
};
const int num_persom=0;
static int num_static=0;
}
#endif
person.cpp
#include "Person.h"
person_space::Person::Person():ID(0)
{
num++;
}
person_space::Person::Person(int id):ID(id){num++;}
person_space::Person::~Person()
{
num--;
}
int person_space::Person::num=0;
int person_space::Child::num=0;
int person_space::Adult::num=0;
main.cpp
#include "vld.h"
#include "vldapi.h"
#include "person.h"
#include <iostream>
using namespace std;
int main()
{
person_space::Person* p=new person_space::Person();
person_space::Child c;
person_space::Adult a;
int count = a.get_num();
person_space::Person* child =new person_space::Child();
std::cout<<child->get_num()<<std::endl;
person_space::Person* adult = new person_space::Adult();
cout<<adult->get_num()<<endl;
cout<<p->get_num()<<endl;
delete child;
cout<<c.get_num()<<endl;
person_space::num_persom;
person_space::num_static++;
cout<<person_space::num_persom<<endl;
cout<<person_space::num_static<<endl;
}