第5章 类的应用.ppt

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

第5章 类的应用 主要内容 类的静态成员 this 指针 类的友元(friend) 1、类的静态成员 如果希望已定义的对象之间有一个共同的变量以存储与与这些对象相关的数据,比如共有多少个对象被定义了。 以下的设计是错误的: class Count{ private: int count; public: Count(){count = 0;} void add(){count++;} int get(){return count;} }; … void main() { Count C1; C1.add(); Count C2; C2.add(); Count C3; C3.add(); … }; 改用全局变量 用全局变量虽然可以使得对象间有着共同的关系,但是,除了该类的对象,非该类的对象,程序的其他部分也同样可以引用这个变量。就没有数据封装的意义了。 //定义一个全局变量 int count = 0; class Count{ public: Count() {Count::count++;} int get() { return Count::count;} }; … void main { Count C1; Count C2; Count C3; CountC3.get(); } 1.1 静态数据成员 静态数据成员可以解决以上的问题。 将类成员说明为静态的,将使得所有该类的对象只保留一份静态的类成员,是同一个类中所有对象共享的成员,而不是某一对象的成员。一个类的静态数据成员只存储在一处,供该类所有对象共享访问。 如果需要把某一数据成员声明为静态成员,只需在其前面加关键字static。由于静态数据成员是静态存储的,它具有静态生存期。 静态成员和普通数据成员 静态数据成员的使用 见例:Statdata.cpp 可见将变量count 设定为静态数据成员,则将来所有对象若引用了此变量,便都操作在同一数据成员上,这样不但有全局变量的功能,且又受数据封装的保护限制,非该类的对象便无权引用此静态数据成员。 静态数据成员的特性 静态数据成员必须在类中说明后,在全局范围中给与初值,然后才能使用: int Count::count = 0; //此语句必须在全局范围中 静态数据成员并不专属于某一对象,初值只能被赋一次,也就是只能在整个程序中出现一次,因此最好不要把静态数据成员的初值设定放在头文件(header file)中。 静态数据成员并不专属于某一对象,因此在程序中未定义任何该类的对象时,也可以直接引用静态数据成员,但必须以给定初值,且此静态数据成员为public数据成员,对它的访问可以直接通过类名实现,也可以通过对象名引用。 不通过该类的对象直接访问静态数据成员 例如:#includeiostream.h class A{ public: static int x; }; int A::x=0; void main() { coutA::xendl; A::x=10; coutA::xendl; } 1.2 静态成员函数 如果声明类时,在其中的某个成员函数的类型前加上关键字static,则这个成员函数就是静态成员函数。 与静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。 在静态成员函数的函数体中,可以直接访问所属类的静态成员,不能直接访问非静态成员。要访问非静态成员,须借助于对象名或指向对象的指针。 见例: StaticCount.cpp 必须注意:无论是直接引用静态数据成员或静态成员函数,都必须指明其所属的类范围,其方法便是利用所属的类名称与作用域运算符。 具体格式为: 类名::静态数据成员 类名::静态成员函数 如果指明用对象来访问静态成员函数,因为它不属于特定的对象,所用到的静态数据成员值是唯一的。 2、this 指针 如前所述:每一类所定义的对象皆有属于自身部分的数据成员,但成员函数则只有一份。类的成员函数可以自动判别程序中是哪个对象调用了此成员函数,因而也就能访问到此类的数据成员。编译器是如何完成这样自动判别的工作?答案就是用this指针。 2.1 this指针的定义 This指针是一隐含的指针,其隐含于每个类的成员函数。 例如,成员函数 volume定义如下: int Box::volume( ) { return height*width*length; } C++编译器把它处理为: return (this-height *this-width*this-length); This 指针用以指向该成员函

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档