收藏 分享(赏)

第6章-静态成员与友元.ppt

上传人:hwpkd79526 文档编号:10122942 上传时间:2019-10-12 格式:PPT 页数:18 大小:298.50KB
下载 相关 举报
第6章-静态成员与友元.ppt_第1页
第1页 / 共18页
第6章-静态成员与友元.ppt_第2页
第2页 / 共18页
第6章-静态成员与友元.ppt_第3页
第3页 / 共18页
第6章-静态成员与友元.ppt_第4页
第4页 / 共18页
第6章-静态成员与友元.ppt_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、,第六章 静态成员 与友元,主讲:宋丽红,面向对象程序设计(C+) Oriented Object Programming (C+),第六章 静态成员与友元函数,6-1 静态成员6-2 友元6-3 const数据保护,6-1 静态成员,6.1.1 静态成员的需要性属于类的一部分,但既不适于用普通成员表示,也不适于全局变量表示的数据,用静态成员表示。对象个数对象链表头、尾指针类的状态声明为static的类成员为静态成员,解决同一个类的不同对象之间的数据和函数共享问题。,6-1 静态成员,6.1.2 静态数据成员类属性实例属性:一个类的所有对象都具有的相同的属性,是指属性的个数、名称、数据类型相同

2、,各个对象的属性值则可以互不相同,并随着程序的执行而变化。类属性:描述类的所有对象的共同特征的一个数据项,对于任何对象实例,它的属性值是相同的。在C+中,用静态数据成员来实现类属性。,6-1 静态成员,6.1.2 静态数据成员定义静态数据成员在类定义中必须说明static 数据类型 静态数据成员名;公共静态数据成员可被类的外部访问,保护或私有静态数据成员只可被类的内部访问。静态数据成员具有静态生命期在定义的同时不能初始化,6-1 静态成员,6.1.2 静态数据成员初始化静态数据成员要实际地分配空间,故不能在类声明中初始化(只能声明静态数据成员)。类定义只声明一个类的“尺寸与规格”,并不进行实际

3、的内存分配。静态数据成员不能在任何函数内分配空间和初始化静态数据成员也不能在main()函数之前的全局数据声明处初始化。静态数据成员说明应放在类的内部实现部分(成员函数定义)。static 数据类型 类名:静态数据成员名=初值;,#include class Myclass public:Myclass(int,int,int);void GetNumber();void GetSum();private:int A,B,C;static int Sum; ; int Myclass:Sum=0; Myclass(int a,int b,int c) A=a; B=b; C=c; Sum+=A

4、+B+C; void GetNumber() cout“Number=”A“,”B“,”Cendl;,6-1 静态成员,void GetSum() cout“Sum=”Sumendl; void main() Myclass M(3,7,10),N(14,9,11);M.GetNumber();N.GetNumber();M.GetSum();N.GetSum(); ,Number=3,7,10 Number=14,9,11 Sum=54 Sum=54,6-1 静态成员,6.1.3 静态成员函数作用:专门用来处理静态数据成员定义:静态成员函数定义是类的内部实现, 属于类定义的一部分,它的定义位

5、置与一般成员函数一样。说明:在类定义中声明静态函数,只有public的函数才能从类的外部调用。调用:访问静态成员函数时,不需要对象,如果用对象去引用静态成员函数只是用其类型。,6-1 静态成员,6.1.3 静态成员函数注意:类中的任何成员函数都可以访问静态数据成员,但静态成员函数只能通过对象名访问对象的非静态数据成员,因为静态成员函数没有this指针。访问非静态成员的操作都是非法的。静态成员函数能对静态成员函数访问。静态成员函数与非静态成员函数的根本区别是静态成员函数没有this指针,而非静态成员函数有一个指向当前对象的指针this。,6-1 静态成员,class A private: int

6、 a; static int s; public: void fun(); static void sfun(A ,6-2 友元,6.2.1 需要友元的原因普通函数需要直接访问一个类的保护或私有数据成员。友元提供了不同类对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。即通过友元的方式,一个一般函数可以访问一个类的私有数据,一个类可访问另一个类的私有数据。方便编程,但破坏了类的封装。,6-2 友元,6.2.2 友元函数友元函数是在类声明中由关键字friend修饰的该类的非成员函数。友元函数可以是一个普通函数,也可以是其它类的成员函数,它虽然不是本类的成员函数,但在其函数体中可以

7、通过对象名访问本类的私有和保护成员。即友元函数不是成员函数,它是类的朋友,因而能够访问类的全部成员。友员的声明可在类内部任何位置,其定义则在类的外部,与类的成员函数定义放在一起。 class A public:friend void fun(A ,6-2 友元,6.2.3 友类类也可以声明为另一个类的友元,这时称为友元类(友类)。若A类为B类的友类,则A类的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护数据。friend class 类名; /在类定义中声明友类的声明可在类内部任何位置。 class B friend class A; ;,6-3 const数据保护,6.3.1 常

8、引用在说明引用时用const修饰常引用所引用的对象不能被更新,#include void display(const double ,6-3 const数据保护,6.3.2 常对象常对象的数据成员值在对象的整个生命期内不能被改变,即常对象必须进行初始化,而且不能被更新。类名 const 对象名;,class A public:A(int i,int j) x=i; y=j; void SetX(int i) x=i; private:int x,y; ; A const a(3,4); A const b; b.SetX(3); ,6-3 const数据保护,6.3.3 用const修饰的类成

9、员常成员函数返回值类型 函数名(形参表)const;注意:const是函数类型的一个组成部分,因此在实现部分也要带关键字const。常成员函数不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。如果将一个对象说明为常对象,则通过该常对象只能调用其常成员函数,而不能调用其它成员函数。const关键字可以被用于参与对重载函数的区分。void print();void print() const;,6-3 数据保护,6.3.3 用const修饰的类成员常数据成员使用const说明的数据成员为常数据成员如果在一个类中说明了常数据成员,那么任何函数中都不能对该成员赋值。,6-3 const数据保护,#include class A public:A(int i);void print();const int ,100:10:100 0:10:0,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报