C++命名空间.doc

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C命名空间剖析

本讲基本要求 ???? * 掌握:命名空间的作用及定义;如何使用命名空间。 ???? * 了解:使用早期的函数库? 重点、难点 ???? 命名空间的作用及定义;如何使用命名空间。 ????在学习本书前面各章时,读者已经多次看到在程序中用了以下语句: using namespace std; ????这就是使用了命名空间std。在本讲中将对它作较详细的介绍。 一、 为什么需要命名空间(问题提出) ????命名空间是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

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档