33静态类成员331静态数据成员希望数据为类的所有对象课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《33静态类成员331静态数据成员希望数据为类的所有对象课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 33 静态 成员 331 数据 希望 所有 对象 课件
- 资源描述:
-
1、3.3 静态类成员3.3.1 静态数据成员 希望数据为类的所有对象共享,而不是每个类对象维持一个独立的数据成员。例如:计数在程序的任意一点一共创建了多少个此类类型的对象。静态数据成员对每个类类型只有一个拷贝,由该类对象共享访问。非静态数据成员对每个类对象都有自己的拷贝。可以实现信息隐藏,可以是private成员。3.3.1.1 类定义内声明在类体中数据成员声明前加上static关键字,使该数据成员成为静态的例如:class student int num;float score;public:static float passmark;static int passnum;student(in
2、t a,float f)num=a;score=f;3.3.1.2 类定义外初始化 语法:数据类型 类名:数据成员名=初值;注意:如果没有初值,系统自动初始化为0。整型const静态数据成员可以在类定义体内用常量值初始化,但仍要在类定义体外定义该数据成员且不能再指定初始值。静态数据成员的初始化不应该放在头文件中。一般放在类定义之后,main函数之前。产生类对象之前可能用到静态数据成员。例如:class Accout static const int namesize=16;static const char namenamesize;const int Accout:namesize;cons
3、t char Accout:namenamesize=”saving account”;3.3.1.3 静态数据成员的访问 类的成员函数中访问:用静态数据成员名直接访问 非成员函数中访问public静态数据成员:类名:静态数据成员名 对象.静态数据成员名 指向对象的指针-静态数据成员名 例如:计数已创建对象的数目 class Data int num;float score;public:static int object;Data(int a,float f):num(a),score(f)object+;Data()object-;3.3.2 静态成员函数 希望在产生对象之前访问priva
4、te静态数据成员 3.3.2.1 声明与定义 在类内普通成员函数声明前加上static关键字,在类外定义前不需再加static。注意:静态成员函数没有this指针,不能访问类的非静态成员,只能访问类的静态数据成员或是调用其它静态成员函数。3.3.2.2 调用 类名:静态函数名(参数表);对象.静态函数名(参数表);指向对象的指针-静态函数名(参数表);例如:class Small static int object;public:Small()object+;static int get_n()return object;Small()object-;int Small:object=0;in
5、t main()int n;n=Small:get_n();/3.3.3 全局、静态局部类对象 3.3.3.1 局部静态类对象 在函数或复合语句内,用static关键字定义的对象。例如:int fun()static Data(1,89.0);return 0;代码执行过程中第一次遇到该对象定义时,构造函数被调用,程序运行中仅调用一次;在程序运行结束前,调用析构函数,也只调用一次。例如:class demo public:demo()cout”object constructorn”;demo()cout”object destructor n”;void fun()static demo d
6、1;int main()coutmain startn;fun();coutagainn;fun();输出:main start coutmain endn;object constructor again main end object destructor 3.3.3.2 全局类对象 在函数外定义的对象。构造函数在main函数执行前被调用,析构函数在程序运行结束前调用。例如:class demo public:demo()coutobject constructor n;demo()coutobject destructor n;int main()coutmain startn;cout
7、main endn;return 0;输出:object constructor static demo d1;main start main end object destructor 3.4 友元3.4.1 友元函数3.4.1.1友元函数的声明 允许一个类授权其它的函数或类访问它的非公有成员。友元声明以friend关键字开头,只能出现在类的定义中。友元不是类的成员,不受访问说明符的影响。一般将类中所有友元关系的声明放在类头之后。语法:friend 数据类型 函数名(参数标);3.4.1.2 友元函数的参数 成员函数由对象调用,系统传递this指针使其可以访问对象的成员。友元函数没有this
8、指针,要访问对象的成员,必须将要访问的对象作为参数传递。访问类对象的成员必须加上对象名和成员访问运算符。例如:class Data friend void get_val(Data&it,int n,float s);int num;float score;public:Data(int a,float f)num=a;score=f;Data()num=0;score=0.0;void print();void Data:print()coutnum“n”score,或者任何赋值运算符重载函数必须声明为类的一个成员函数。赋值运算符重载用于“=”两侧的对象都已经存在时,一个类对象向该类的另一个
展开阅读全文