《C++备课讲义第11章.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
静态数据成员的使用说明 静态数据成员是全局数据和一般数据成员之间的折中;静态数据成员与全局变量一样都是静态分配存储空间的,但全局变量在程序中的任何位置都可以访问它,而静态数据成员受到访问权限的约束。 静态成员是属于类的而不是属于对象的。通常的数据成员是每个对象一个,但静态数据成员是每个类一个。定义了类以后,即使还没有创建对象,类的静态数据成员也已经存在,通过静态数据成员名前加上类名和作用域运算符,可直接使用静态数据成员。 必须在文件作用域中,对静态数据成员作一次且只能作一次定义性说明。 为了保持静态数据成员取值的一致性,通常在构造函数中不给静态数据成员置初值,而是在对静态数据成员的定义性说明时指定初值。 静态数据成员 #include iostream.h class T{ public: static int x; T(int a=0){x=a;} }; void main( ) { T a; T b(40); couta.x\tb.x\tT::xendl; } 友元类 当把类的成员的访问权限定义为private或protected时,在类的外面只能通过该类的公有的成员函数才能访问这些成员。这是由类的封装性所确定的。 但有时两个类或多个类关系非常密切,必须紧密协同地工作,因此希望一个类能直接访问另一个类的私有数据。 方法之一是把类的成员的访问权限均定义为公有的,但该方法破坏了面向对象的封装性。 C++的“友元”机制允许在类外访问类中的任何成员(私有的、保护的或公有的)。 友元的特点 友元关系是不可传递的。如类A是类B的友元,类B是类C的友元,但类A并不是类C的友元。 友元关系不具有交换性。 friend仅提供了单向的访问权限。除非显式说明,否则友元关系不是双向的。若类A为类B的友元,但类B并不一定是类A的友元。 友元关系也不能继承。如A类是B类的友元,C类由B类派生,则A类不是C类的友元。 当使用友元机制时,所编写的就不是一个独立的类,而是两个或多个总是一起使用的类。如果要重写一个类就必须重写其它相关的类。因此应该谨慎使用友元机制。 成员函数用作友元 有时并不想将整个类都作为另外一个类的友元,而仅想将这种权利授予其中的一两个函数,即类中的成员函数做友元。 若在B类的定义中,将A类的某一成员函数说明为B类的友元函数,则A类中的该成员函数可以访问B类中的任何成员。 友元函数 友元函数也可以是一个普通的函数,甚至主函数。若在一个类的定义中将某一函数说明为友元,则该函数能够访问类中的所有成员。 * * * 第11章 静态成员与友元 (选学) Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 通常,每当说明一个对象时,把该类中的有关成员数据拷贝到该对象中,即同一类的不同对象,其成员数据之间是互相独立的。 静态成员 class A{ int x,y; public: void Setxy(int a, int b) { x=a; y=b;} }; A a1, a2; a1.x a1.y a2.x a2.y ...... x=a ; y=b ; ...... a1. Setxy() a2. Setxy() a1.Setxy(1,2); a2.Setxy(3,4); this-x=a; this-y=b; Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. 静态数据成员 假设要定义一个类SavingAccount来表示银行中的存款帐号。该类的每个对象代表某个特定客户的帐户,它的数据成员存储了客户的姓名和帐号上的当前余额以及目前的利率。该类还有一个成员函数,它按每天的利息来增加帐号上的余额。 class SavingsAccount { private: char name[30]; float total; float currentRate; public: SavingsAccount(); void earnInterest(); {total+=currentRate*total;} }; curre

文档评论(0)

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

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

1亿VIP精品文档

相关文档