1/13
文档分类:IT计算机

静态成员和友元.ppt


下载后只包含 1 个 PPT 格式的文档,里面的视频和音频不保证可以播放,查看文件列表

特别说明:文档预览什么样,下载就是什么样。

下载所得到的文件列表
静态成员和友元.ppt
文档介绍:
静态成员和友元.ppt面向对象程序设计(C++)第5章 静态成员和友元5.1静态成员的需要性静态成员是解决同一个类的不同对象之间的数据共享问题的一种手段。例如,一个学生类:classStudent{private:intstuNo;char*Name;public://…};如果需要统计学生总数,这个数据应该存放在哪?[方案1]存储于类外的全局变量中:破坏数据封装。[方案2]在类中增加一个数据成员:冗余、维护困难、易出现数据的不一致性。理想的解决方案:使类的所有对象共同拥有一个用于存放总数的数据成员,即静态数据成员。5.2静态数据成员实例属性:对象的属性,不同的对象其值可以各不相同。类属性:描述类的所有对象的某种共同特征的数据项,对于任何对象实例,其属性值均相同。在C++中通过静态数据成员来实现类属性。静态数据成员是类的数据成员中的一种特例,用static关键字声明,每个类只有一个拷贝,由该类的所有对象共同使用和维护,从而实现了同一类的不同对象之间的数据共享。静态数据成员具有静态生存期。由于不属于某一个对象,因此一般通过类名对其进行访问,用法是类名::标识符。在类的声明中仅仅对静态数据成员进行引用性说明,必须在文件作用域的某个地方使用类名限定进行定义性说明,并进行初始化。5.2静态数据成员classPoint{public: Point(intxx=0,intyy=0) {X=xx;Y=yy;countP++;} Point(Point&p); intGetX(){returnX;} intGetY(){returnY;} voidGetC() {cout<<“Objectid=”<<countP<<endl;}private: intX,Y; staticintcountP;//静态数据成员引用性说明};Point::Point(Point&p){X=p.X;Y=p.Y;countP++;}intPoint::countP=0;//静态数据成员定义性说明voidmain(){ PointA(4,5); cout<<“PointA:”<<A.GetX()<<“,”<<A.GetY(); A.GetC(); PointB(A); cout<<“PointB:”<<B.GetX()<<“,”<<B.GetY(); B.GetC();}PointA:4,5Objectid=1PointB:4,5Objectid=25.2静态数据成员公有的静态数据成员可以在类的外部访问,保护或私有的静态数据成员只能在类内部访问。在类的外部访问静态数据成员的形式可以是<对象名>.<静态数据成员名>或<类名>::<静态数据成员名>但不能用<类名>.<静态数据成员名>其意义是静态数据成员是属于类的,不是属于某个特定的对象,也不需要依赖某个对象的数据。静态数据成员常见的应用场合:1.保持变化的对象个数2.作为指示一个动作是否发生的标志3.指向链表第一个或最后一个成员的指针5.3静态成员函数上例中输出静态成员countP是通过类的一个成员函数GetC()来实现的。调用普通的成员函数必须通过该类的一个对象进行,那么在尚未声明任何对象之前,便无法通过成员函数访问静态数据成员了。既然静态数据成员是整个类所共有的,不属于任何一个对象,那么对它的访问也应该不依赖某个具体的对象才能完成,静态成员函数便可实现这个目标,它可以直接访问该类的静态数据和函数成员。对于公有的静态成员函数,可以通过类名或对象名来调用。5.3静态成员函数声明静态成员函数时,在类型说明符之前加关键字static。函数的实现可以在类内,也可以在类之外,和普通的成员函数相同。对静态成员函数的引用,即可以通过类名,也可以通过对象名进行:<类名>::<静态成员函数名>(<参数表>)<对象名>.<静态成员函数名>(<参数表>)由于静态成员函数不与任何对象相联系,因此静态成员函数不能直接访问非静态数据成员,如果要访问非静态数据成员,则可通过参数传递的方式得到对象名,然后通过对象名来访问。5.3静态成员函数classPoint{public: Point(intxx=0,intyy=0) {X=xx;Y=yy;countP++;} Point(Point&p); intGetX(){returnX;} intGetY(){returnY;} staticvoidGetC() {cout<<“Objectid=”<<countP<<endl;}private: intX,Y; staticintcountP;//静态数据成员引用性说明};Point::Point(Point&p){X=p.X;Y=p.Y;countP++;}intPoint::countP=0;//静态数据成员定义性说明voidmain(){ Poin
内容来自淘豆网www.taodocs.com转载请标明出处.
非法内容举报中心
文档信息
  • 页数13
  • 收藏数0 收藏
  • 顶次数0
  • 上传人lily8501
  • 文件大小143 KB
  • 时间2020-10-22
文档标签