C++教程适合C语言基础上一篇教程强调了构造函数和析构函数的概念,这也是C++中两个非常重要的概念之一。在今天的教程中,笔者将继续讲述C++与C语言的区别,并对命名空间、静态成员、友元函数、运算符重载等知识点进行详细的讲述。C++namespace命名空间的存在是为了区分不同库中相同的函数名。一个简单的例子可以说明这个问题,在Windows文件系统中,同名的文件可以存在于不同的文件夹中。因为相同的文件在不同的作用域中,在C++中,它们在不同的命名空间中。文件系统结构图:文件系统框图定义namespace命名空间定义使用关键字namespace,后接命名空间名称,如下:namespacenamespace_name{//codedeclaration}为了调用带有命名空间的函数或变量前面需要加上命名空间的名称,如下所示:name::code//code可以是变量或函数示例下面用一个例子来说明命名空间的概念。首先,我们有两个类,一个是Dog,一个是Person,此时有两个同名的函数,它们都输出不同的信息。这时候就需要用到命名空间的概念了。首先,我们在dog.h中定义一个dog类,代码如下:);};voidprintVersion(void);}#endif然后我们看dog.cpp中的内容。代码如下:#include"dog.h"namespaceC{voidDog::setName(char*name){this->name=name;}intDog::setAge(intage){if(age<0||age>20){this->age=0;return-1;}this->age=age;return0;}voidDog::printInfo(void){printf("name=%s,age=%d\n",name,age);}voidprintersion(void){printf("Dogv1");}}OK,看完Dog的代码,我们再来看Person的代码,代码如下:#ifndef__PERSON_H__#define__PERSON_H__namespaceA{classPerson{private:char*name;intage;char*work;public:voidsetName(char*name);intsetAge(intage);voidprintInfo(void);};voidprintfVersion(void);}#endif后面是Person.cpp的代码,具体代码如下:namespaceA{voidPerson::setName(char*name){this->name=name;}intPerson::setAge(intage){if(age<0||age>150){this->age=0;return-1;}this->age=age;return0;}voidPerson::printInfo(void){printf("name=%s,age=%d,work=%s\n",name,age,work);}voidprintVersion(void){printf("Personv1\n");}}以上就是定义的两个类,我们看main.cpp的代码:intmain(intargc,char**argv){A::Personper;per.setName("zhangsan");per.setAge(16);per.printInfo();C::Dogdog;dog.setName("wangcai");dog.setAge(1);dog.printInfo();A::printVersion();C::printVersion();return0}在倒数第二行和倒数第二行,我们可以看到如果此时没有命名空间,那么就完全无法区分printVersion函数,加上命名空间后,可以区分静态成员在上面代码的基础上,我们在main函数中定义了几个变量,代码如下:#include
