欢迎来到天天文库
浏览记录
ID:60773484
大小:216.50 KB
页数:14页
时间:2020-02-02
《第十二章 静态成员、友元.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、静态成员和友元《C++面向对象程序设计》第十二章1本章主要内容静态成员的概念静态数据成员静态函数成员友元的概念友元函数友元类2静态成员的概念C++中一般不给类分配内存,仅给对象分配内存。每个对象的内存空间都是类定义数据成员的一个副本,副本中的数据是彼此独立的。但有时一个类的所有对象又需有共享的数据,例如要统计类所生成对象的个数,若为此在对象中引入一数据成员存储,不但数据冗余大,且数据一致性也差;引入全局变量,将破坏类的封装性;为此在类中引入静态成员此类成员在C++中用静态成员表示,分为二种:类的静态成员是用于表示类的属性的,而不是用于表示某个对象的属性的静态成员也具有公有、保护或私有访问
2、属性静态数据成员静态成员函数3静态成员的定义静态成员定义格式:在类的成员前加保留字static,该成员就被定义为静态成员【例】classfile{…staticintfilecount;…public:staticintgetfilecount();}f1;4静态数据成员的初始化类的静态数据成员属于类的所有对象,必须在类的定义之外,单独对其初始化,系统才能给它分配内存空间静态数据成员的初始化要在所有函数定义体之外进行静态数据成员初始化格式:类标识符类名::静态数据成员名〖=初始化表达式〗【例】intfile::filecount=0;若省略初始化表达式,则自动初始化为05静态成员的调用静
3、态成员调用有二种格式:通过类名访问:类名::静态成员名通过对象名访问:对象名.静态成员名或指针对象名静态成员名【例】cout<4、eturnfilecount;};//构造函数定义file::file(char*name){…filecount++;}//引入静态成员filecount//引入静态成员函数getfilecount()//每定义一对象,filecount值加一7//析构函数定义file::~file(){delete[]contents;filecount--;}//主程序文件…intfile::filecount=0;voidmain(){cout<5、unt();deletepfile;cout<6、率低下。为提高这类访问效率,C++中引入友元的概念,允许在类的定义体中将类外的函数或其它类说明为友元函数或友元类友元函数和友元类的成员函数具有访问该类所有成员(不论访问属性如何)的特权在类定义体内用friend作为函数原型或类说明的前缀,则该函数或类即被说明为该类的友元函数或友元类友元函数和友元类虽能提高操作效率,但也破坏了类的封装性,必须有限制地使用9私有成员保护成员公有成员类作用域类对象及普通函数友元类及友元函数友元类和友元函数与类成员的关系示意图:【说明】友元函数和友元类成员函数可不受成员访问属性限制地访问类的的有成员10【例】友元类定义及使用//定义坐标点类classPoint{7、intx,y;friendclassCircle;public:Point():x(0),y(0){}Point(intxx,intyy):x(xx),y(yy){}voidsetx(intxx){x=xx;}voidsety(intyy){y=yy;}intgetx(){returnx;}intgety(){returny;}};在类Point的定义体中,将圆类Circle说明为友元类11//定义圆类classCircle{Poi
4、eturnfilecount;};//构造函数定义file::file(char*name){…filecount++;}//引入静态成员filecount//引入静态成员函数getfilecount()//每定义一对象,filecount值加一7//析构函数定义file::~file(){delete[]contents;filecount--;}//主程序文件…intfile::filecount=0;voidmain(){cout<5、unt();deletepfile;cout<6、率低下。为提高这类访问效率,C++中引入友元的概念,允许在类的定义体中将类外的函数或其它类说明为友元函数或友元类友元函数和友元类的成员函数具有访问该类所有成员(不论访问属性如何)的特权在类定义体内用friend作为函数原型或类说明的前缀,则该函数或类即被说明为该类的友元函数或友元类友元函数和友元类虽能提高操作效率,但也破坏了类的封装性,必须有限制地使用9私有成员保护成员公有成员类作用域类对象及普通函数友元类及友元函数友元类和友元函数与类成员的关系示意图:【说明】友元函数和友元类成员函数可不受成员访问属性限制地访问类的的有成员10【例】友元类定义及使用//定义坐标点类classPoint{7、intx,y;friendclassCircle;public:Point():x(0),y(0){}Point(intxx,intyy):x(xx),y(yy){}voidsetx(intxx){x=xx;}voidsety(intyy){y=yy;}intgetx(){returnx;}intgety(){returny;}};在类Point的定义体中,将圆类Circle说明为友元类11//定义圆类classCircle{Poi
5、unt();deletepfile;cout<6、率低下。为提高这类访问效率,C++中引入友元的概念,允许在类的定义体中将类外的函数或其它类说明为友元函数或友元类友元函数和友元类的成员函数具有访问该类所有成员(不论访问属性如何)的特权在类定义体内用friend作为函数原型或类说明的前缀,则该函数或类即被说明为该类的友元函数或友元类友元函数和友元类虽能提高操作效率,但也破坏了类的封装性,必须有限制地使用9私有成员保护成员公有成员类作用域类对象及普通函数友元类及友元函数友元类和友元函数与类成员的关系示意图:【说明】友元函数和友元类成员函数可不受成员访问属性限制地访问类的的有成员10【例】友元类定义及使用//定义坐标点类classPoint{7、intx,y;friendclassCircle;public:Point():x(0),y(0){}Point(intxx,intyy):x(xx),y(yy){}voidsetx(intxx){x=xx;}voidsety(intyy){y=yy;}intgetx(){returnx;}intgety(){returny;}};在类Point的定义体中,将圆类Circle说明为友元类11//定义圆类classCircle{Poi
6、率低下。为提高这类访问效率,C++中引入友元的概念,允许在类的定义体中将类外的函数或其它类说明为友元函数或友元类友元函数和友元类的成员函数具有访问该类所有成员(不论访问属性如何)的特权在类定义体内用friend作为函数原型或类说明的前缀,则该函数或类即被说明为该类的友元函数或友元类友元函数和友元类虽能提高操作效率,但也破坏了类的封装性,必须有限制地使用9私有成员保护成员公有成员类作用域类对象及普通函数友元类及友元函数友元类和友元函数与类成员的关系示意图:【说明】友元函数和友元类成员函数可不受成员访问属性限制地访问类的的有成员10【例】友元类定义及使用//定义坐标点类classPoint{
7、intx,y;friendclassCircle;public:Point():x(0),y(0){}Point(intxx,intyy):x(xx),y(yy){}voidsetx(intxx){x=xx;}voidsety(intyy){y=yy;}intgetx(){returnx;}intgety(){returny;}};在类Point的定义体中,将圆类Circle说明为友元类11//定义圆类classCircle{Poi
此文档下载收益归作者所有