数据共享和成员特性

数据共享和成员特性

ID:37796210

大小:352.81 KB

页数:41页

时间:2019-05-31

数据共享和成员特性_第1页
数据共享和成员特性_第2页
数据共享和成员特性_第3页
数据共享和成员特性_第4页
数据共享和成员特性_第5页
资源描述:

《数据共享和成员特性》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第5章数据共享和成员特性5.1静态成员5.2友元5.3成员其他特性5.4this指针5.5综合应用实例:栈类静态操作5.1静态成员使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共享。静态数据成员的值是可以修改的,但它对每个对象都是一样的。1.定义和使用与静态变量相似,静态数据成员是静态存储(static)的,但定义一个静态数据成员与一般静态变量不一样,它必须按下列2步进行:(1)在类中使用关键字static声明静态数据成员。在类中声明静态数据成员,仅仅是说明了静态数据成员是类中的成员这个关系,即便用该类定义对象时,该静

2、态数据成员也不会分配内存空间。因此可以说,类中声明的静态数据成员是一种形式上的虚的数据成员。静态数据成员的实际定义是由下一步来完成。(2)在类外为静态数据成员分配内存空间并初始化。类中数据成员的内存空间是在对象定义时来分配的,但静态数据成员的内存空间是为所有该类对象所共享,只能分配一次,因而不能通过定义类对象的方式来分配,即其初值不通过构造函数来制定,必须在类的外部作实际定义才能为所有对象共享,其定义格式如下:<数据类型><类名>::<静态数据成员名>=<值>可见,在类外初始化的静态数据成员与全局变量初始化格式相似,只是须指明它所属的类。由于静态数据成员的静态属性static已在类中

3、声明,因此在类外不可再指定static。例如:5.1.1静态数据成员5.1.1静态数据成员程序运行的结果如下:分析:(1)A中,由于使用了默认参数,因而使得默认构造函数和重载构造函数定义成一个构造函数。这种程序方法在实际应用时要小心使用。(2)程序中,类CSum中的私有数据成员nSum被声明成静态的,由于类中声明的nSum是虚的,因此它必须在类体外进行实际定义。若不指定初值,则默认为0。(3)main函数中,对象one初始化后,nSum值变为12。对象two由于调用的是(a=0,b=0)的默认构造函数,故nSum的值没有变化,仍然是12(注意构造函数体的语句“nSum+=a+b;”中

4、的“+=”不是“=”)。因此,main函数中前面两条输出语句的结果都是输出12。当执行“two.setSum(5);”后,nSum值被设为5。由于nSum是所有对象所共享,也就是说,nSum是所有对象的公共成员,因此对象one中的nSum的值也是5。5.1.1静态数据成员2.几点说明(1)由于静态数据成员在类中所作的声明仅仅是一种声明该成员是属于哪个类的,它是形式上的虚的成员,还必须在类的外部作实际定义才能为所有对象共享,正因为如此,静态数据成员的实际定义和初始化本身是不受public、private和protected等访问属性的限制。(2)静态数据成员可看成是类中声明、类外定义的

5、静态全局变量,因此它具有静态生存期,在程序中从实际定义时开始产生,到程序结束时消失。也就是说,静态数据成员的内存空间不会随对象的产生而分配,也不会随对象的消失而释放。当然,静态数据成员的内存空间同样不能在类的构造函数中创建或是在析构函数中释放。(3)静态数据成员是类中的成员,它的访问属性同普通数据成员一样,可以为public、private和protected。当静态数据成员为public时,则在类外对该成员的访问和引用可有2种方式,一是通过对象来引用,二是直接引用。当直接引用时,应使用下列格式:<类名>::<静态成员名>5.1.1静态数据成员例如,有:classCSum{…publ

6、ic:staticintnSum;//声明公有型静态数据成员};intCSum::nSum=0;//静态数据成员的实际定义和初始化则在main函数中可有下列引用:intmain(){CSumone;one.nSum=10;//通过对象来引用…CSum::nSum=12;//直接引用cout<

7、c)静态成员来说,除可用对象来引用外,还可通过“类名::成员”直接来引用。在类中,静态数据成员可以被成员函数引用,也可以被静态成员函数所引用。但反过来,静态成员函数却不能直接引用类中说明的非静态成员。假如,静态成员函数可以引用了类中的非静态成员,例如:classCSum{public:staticvoidChangeData(intdata){nSum=data;//错误:引用类中的非静态成员}public:intnSum;};则当执行语句:CSum::C

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。