第10章 静态成员与友元

第10章 静态成员与友元

ID:42716593

大小:78.00 KB

页数:32页

时间:2019-09-21

第10章 静态成员与友元_第1页
第10章 静态成员与友元_第2页
第10章 静态成员与友元_第3页
第10章 静态成员与友元_第4页
第10章 静态成员与友元_第5页
资源描述:

《第10章 静态成员与友元》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第八章多态性静态成员友元友元应用实例静态成员是指声明为static的类成员。在类的范围内所有对象共享某个数据。友元是一种定义在类外部的普通函数,但它需要在类的内部进行说明,为了与该类的成员函数加以区别,在说明时前面加上关键字friend。友元不是成员函数,但它可以访问类中的私有成员。其作用是提高程序的运行效率。C++语言中的友元函数为在类外访问类中的私有成员和保护成员提供了方便,但破坏了类的封装性和隐蔽性。友元可以是一个函数,称为友元函数,也可以是一个类,称为友元类。友元函数和友元类统称为友元。静态成员类相当于一个数据类型,当说明

2、一个某类的对象时,系统就为该对象分配一块内存单元来存放类中的所有成员。但在某些应用中,需要程序中属于某个类的所有对象共享某个数据。为此,一个解决的办法就是将所要共享的数据说明为全局变量,但这将破坏数据的封装性;较好的解决办法是将所要共享的数据说明为类的静态成员。静态数据成员C++中,同一个类定义多个对象时,每个对象拥有各自的数据成员(不包括静态数据成员),而所有对象共享一份成员函数和一份静态数据成员。静态数据成员是类的所有对象中共享的成员,而不是某个对象的成员,因此可以实现多个对象间的数据共享。静态数据成员不属于任何对象,它不因对

3、象的建立而产生,也不因对象的析构而删除,它是类定义的一部分,所以使用静态数据成员不会破坏类的隐蔽性。对静态数据成员的操作和一般数据成员一样,定义为私有的静态数据成员不能由外界访问。静态数据成员可由任意访问权限许可的函数访问。可以在类的成员函数中改变静态数据成员。静态数据成员不从属于任何一个具体对象,所以必须对它初始化,且对它的初始化不能在构造函数中进行。类中用关键字static修饰的数据成员叫做静态数据成员。说明一个静态数据成员的方法与说明一个一般静态变量一样,只不过前者是在一个类中说明。静态数据成员的使用方法如下:(1)静态数据

4、成员的定义与一般数据成员相似,但前面要加上static关键词。(2)静态数据成员的初始化与一般数据成员不同,静态数据成员初始化的格式如下:<类型><类名>::<静态数据成员>=<值>;(3)在引用静态数据成员时采用格式:<类名>::<静态数据成员>这表明:(1)初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。(2)初始化时不加该成员的访问权限控制符private,public等。(3)初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。classClass1{inta

5、;staticintb;//…}c1,c2;intClass1::b;类Class1中包含两个数据成员a和b,其中a为一般数据成员,在对象c1和c2中都存在有各自的该数据成员的副本;而b是静态数据成员,所有类Class1的对象中的该成员实际上是同一个变量。C++编译器将静态数据成员存放在静态存储区,该存储区中的所有数据为类的所有对象所共享。#include classMyclass{ public:Myclass(inta,intb,intc); voidGetNumber(); voidGetSum();

6、 private:intA,B,C; staticintSum; };intMyclass::Sum=0;Myclass::Myclass(inta,intb,intc) { A=a; B=b; C=c; Sum+=A+B+C; }voidMyclass::GetNumber() {cout<<"Number="<

7、(14,9,11);M.GetNumber();N.GetNumber();M.GetSum();N.GetSum(); }从输出结果可以看到Sum的值对M对象和对N对象都是相等的。这是因为在初始化M对象时,将M对象的三个int型数据成员的值求和后赋给了Sum,于是Sum保存了该值。在初始化N对象时,对将N对象的三个int型数据成员的值求和后又加到Sum已有的值上,于是Sum将保存另后的值。所以,不论是通过对象M还是通过对象N来引用的值都是一样的,即为54。静态成员函数静态成员函数的定义和其他成员函数一样。但在说明时需注意静态成员

8、函数不得说明为虚函数。静态成员函数与静态数据成员类似,也是从属于类,静态成员函数的定义是在一般函数定义前加上static关键字。调用静态成员函数的格式如下:<类名>::<静态成员函数名>(<参数表>);静态成员函数与静态数据成员一样,与类相联系,不

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

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

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