欢迎来到天天文库
浏览记录
ID:44204556
大小:261.50 KB
页数:18页
时间:2019-10-19
《Chapter3静态成员和友元》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第3章类与对象《基于C++的面向对象程序设计》2本节教学内容3.1静态成员3.2友元3.2.1友元函数3.2.2友元类3本节教学内容3.1静态成员3.2友元3.2.1友元函数3.2.2友元类43.1静态成员问题引入同一个类的不同对象都拥有自己的数据成员空间,如何实现同一个类的多个对象的之间的数据共享?例1:对于以上定义的表示圆的类,如何统计圆类的对象的个数?53.1静态成员解决方法(☆)方法一:定义全局变量或对象缺点:不安全,任何功能模块都可以更改;方法二:定义静态的数据成员优点:可实现共享,并保证
2、安全性。静态类成员静态数据成员静态成员函数63.1静态成员(一)静态数据成员的定义格式(☆☆☆)在定义类的成员时前面加static,即:static类型名成员名;例如:classCircle{……staticintnum;};73.1静态成员(二)静态数据成员的特点(☆☆)与非静态数据成员的区别一般数据成员在定义对象时才会分配存储空间;静态数据成员是属于整个类的,不定义对象也占有内存,该类的所有对象共享其存储空间。在程序编译时,系统为静态数据成员分配独立的存储空间,当程序结束时撤销。与非静态数据成员
3、的联系都是类的成员,因此满足权限的限制。83.1静态成员(三)静态数据成员的初始化(☆☆☆)类型类名::静态成员名=值注意:1、静态数据成员必须初始化,且必须在类外进行。2、初始化时不加static。3、静态成员名前必须增加类属。93.1静态成员(四)静态数据成员的访问(☆☆☆)方法一类名::静态数据成员名方法二对象名.静态数据成员名注意:静态数据成员同样具有访问控制限制,因此,必须声明为public的,才能在类外访问。举例103.1静态成员(五)静态成员函数(☆☆☆)定义格式在成员函数声明的前面加
4、上关键字static用途:主要用来访问静态数据成员。静态成员函数的访问类名::静态成员函数名(参数表)静态成员函数不属于某一个对象,没有this指针。113.1静态成员(五)静态成员函数注意:在静态成员函数的实现过程中不能直接引用非静态成员(包括数据成员和成员函数)。如何间接引用类的非静态成员呢?(☆)如果要引用,必须通过参数传递的方式得到对象名,然后再通过对象名来引用。12本节教学内容3.1静态成员3.2友元3.2.1友元函数3.2.2友元类133.2友元问题引入——为什么需要友元(friend)
5、?例如:定义一个表示圆的类。再定义一个计算两个圆的圆点之间的距离的普通函数。3.2友元classCircle{public:Circle(double=0,double=0);private:doublex,y;};doubledistance(Circle&c1,Ciecle&c2){return(sqrt((c1.x-c2.x)*(c1.x-c2.x)+(c1.y-c2.y)*(c1.y-c2.y)));}14153.2.1友元函数(一)友元的作用(☆☆)提供了在不同类的成员函数之间、类的成员函
6、数与普通函数之间进行数据共享的机制。B是A的友元,则B可访问A的私有成员。(二)友元的分类友元函数:普通函数和类的成员函数;友元类163.2.1友元函数(三)普通函数声明为友元(☆☆☆)friend类型友元函数名(参数列表);友元函数的调用形式和普通函数相同。173.2.1友元函数(四)成员函数声明为友元函数的格式(☆☆☆)friend类型类名::友元函数名(参数)举例定义表示学生和教师类,在教师类中提供一个可修改学生成绩的成员函数。注意:类的提前声明183.2.2友元类友元类的声明格式(☆☆☆)f
7、riendclass类名;类B是A的友元类,则B中所有的成员函数都是A的友元函数。注意1、友元一般在类中说明,类外定义。2、友元的声明可在类中任何位置。3、友元关系是单向的,且不具有传递性。例如:将上例中教师类声明为学生类的友元。
此文档下载收益归作者所有