C++课件 第章 基于对象编程2.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文档。上传文档
查看更多
第六章 基于对象编程-2 这一章的内容包括: 全局变量/全局函数 static const this指针 栈对象和堆对象 一、全局变量/全局函数 1 C语言中的全局变量 C语言有全局变量的概念,它的主要目的是共享数据。例如: int x,y; fun1( ){……} fun2( ){……} main( ){…..} 定义在函数体外的x,y是全局变量,可以被其它的函数共享使用,x,y保存在程序内存的全局区(也叫静态区)而不是在栈中,其生命周期等同于程序的生命周期。 全局变量是不推荐使用的,它违反了程序的局部性原则,会带来效率和维护问题。在实际编程中,变量的作用域越小越好。JAVA等纯面向对象的语言干脆取消了全局变量。 上述全局变量x,y的有效区为x,y所在的文件,如同一编译单元(工程)的其它文件想使用x,y,需要extern关键字(见谭浩强的课本),这更不推荐使用。 Q1:main()中定义的变量是全局变量吗? 2 C++中的全局变量/全局函数 为了与C兼容,C++仍保留了全局变量和extern。C++的extern还有另一个作用:当它与”C”一起连用时,如: extern C void fun(int a, int b); 则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的。 因为C++有了类,所以C++有了全局函数的概念(其实C语言的函数都是全局的),C++的全局函数就是不从属于类的独立函数,全局函数的生命周期与程序生命周期一样,全局函数可以实例化其它类的对象,但只能访问对象的public成员。 全局函数的效率要比类的成员函数好一些,但它太过松散灵活不易管理,可以使用名称空间来让它们井井有条。 namespace EXP //定义名称空间EXP   {   int a,b;   } //有点类。   在namespace外使用namespace内的变量使用::操作符,如下   expa;   exp 二、static 1 C语言中的static 有三种用法 (1)静态局部变量,这是最主要的用法。 当一个函数(或语句块)重复调用时,可以保存其某一个变量的值。比如: fun(…) {static int z; //其它代码 } 当fun(…)被重复调用时,z不随函数调用结束而销毁,在程序生命期内始终存在。z保存在程序内存的全局区(也叫静态区)而不是在栈中。 与全局变量不同的是:静态局部变量没有数据共享的特性,它只能被定义它的函数(或语句块)“独享”。 (2)让全局变量对同一编译单元(工程)的其它文件不可见。 全局变量之前加上关键字static。3)静态函数? 在函数的返回类型前加上关键字static,函数就被定义成为静态函数。 函数的定义和声明默认情况下是extern的,但静态函数只是在声明的文件当中可见,不能被其他文件所用。其他文件中可以定义相同名字的函数,不会发生冲突static的三种用途? Q3:文件A的全局变量x,想被同一编译单元的其它文件B,C,D…共享,如果不用extern,还有什么其它办法? 答:C语言 函数的定义和声明默认情况下是extern的extern更推荐使用的,它具有维护变量私密性,防止其它程序员对变量非法操作。 推而广之,对同一文件下的全局变量,最好也用get(x),set(x)访问,我们可以把该文件看成一个类,把全局变量看作类的属性(在JAVA中曾学到用函数访问属性的好处)。 C语言是面向过程的,但仍能写出对象风格的程序。 2 C++中的static 首先兼容C语言的static。并做了面向对象的扩展(与JAVA基本一样)。 (1)类的静态成员变量 class A{ public: static int a; //用protected,private修饰也可以。 ……} 静态成员是类。无论这个类的对象被定义了多少个,静态成员在中只有一份拷贝,由该类的所有对象共享访问。静态不能在类声明中。……} class A{ public: static int a; ……} int A:: a=10;//对,应在类体外定义。 从上例可以看出,静态数据成员初始化的格式为: 数据类型 类名::静态数据成员名=值类的静态数据成员有两种访问形式: 类对象名.静态成员名 类类型名::静态成员名 Q4:简要讨论inline函数是否能访问静态成员2)类的静态成员函数 静态成员函数类的全部服务而不是为某具体对象服务。普通的成员函数一般都隐含了一个this指针,this指针指向对象本身,如函数fn()实际上是th

文档评论(0)

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

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

1亿VIP精品文档

相关文档