为什么需要命名空间.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
为什么需要命名空间

3: 为什么需要命名空间 一、 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。 在C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。 1、全局变量的作用域是整个程序,在同一作用域中不应有两个或多个同名的实体(enuty),包括变量、函数和类等。 例:如果在文件中定义了两个类,在这两个类中可以有同名的函数。在引用时,为了区别,应该加上类名作为限定: class A //声明A类 { public: void funl();//声明A类中的funl函数 private: int i; }; void A::funl() //定义A类中的funl函数 {…………} class B //声明B类 { public: void funl(); //B类中也有funl函数 void fun2(); }; void B::funl() //定义B类中的funl函数 { …………} 这样不会发生混淆。 在文件中可以定义全局变量(global variable),它的作用域是整个程序。如果在文件A中定义了一个变量a int a=3; 在文件B中可以再定义一个变量a int a=5; 在分别对文件A和文件B进行编译时不会有问题。但是,如果一个程序包括文件A和文件B,那么在进行连接时,会报告出错,因为在同一个程序中有两个同名的变量,认为是对变量的重复定义。 可以通过extern声明同一程序中的两个文件中的同名变量是同一个变量。如果在文件B中有以下声明: extem int a; 表示文件B中的变量a是在其他文件中已定义的变量。由于有此声明,在程序编译和连接后,文件A的变量a的作用域扩展到了文件B。如果在文件B中不再对a赋值,则在文件B中用以下语句输出的是文件A中变量a的值: couta; //得到a的值为3 2、程序中就会出现名字冲突。 在简单的程序设计中,只要人们小心注意,可以争取不 发生错误。但是,一个大型的应用软件,往往不是由一个人独立完成的,而是由若干人合作完成的,不同的人分别完成不同的部分,最后组合成一个完整的程序。假 如不同的人分别定义了类,放在不同的头文件中,在主文件(包含主函数的文件)需要用这些类时,就用#include命令行将这些头文件包含进来。由于各头 文件是由不同的人设计的,有可能在不同的头文件中用了相同的名字来命名所定义的类或函数。 例4 名字冲突 程序员甲在头文件headerl.h中定义了类Student和函数fun。 //例4中的头文件header1(头文件1,没其文件名为cc8-4-h1.h) #include string #include cmath using namespace std; class Student //声明Student类 { public: Student(int n,string nam,int a) { num=n;name=nam;age=a;} void get_data(); private: int num; string name; int age; }; void Student::get_data() //成员函数定义 { coutnum name ageendl; } double fun(double a,double b)//定义全局函数(即外部函数) { return sqrt(a+b);} 在main函数所在的文件中包含头文件headerl.h: #include iostream using namespace std; #include header1.h //注意要用双引号,因为文件一般是放在用用户目录中的 int main() { Student stud1(101,Wang,18); //定义类对象studl stud1.get_data(); coutfun(5,3)endl; return 0; } 程序能正常运行,输出为 101 Wang 18 2.82843 如果程序员乙写了头文件header2.h,在其中除了定义其他类以外,还定义了类Student和函数fun,但其内容与头文件headerl.h中的Student和函数fun有所不同。 //例4中的头文件header2 #include s

您可能关注的文档

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档