欢迎来到天天文库
浏览记录
ID:42066472
大小:431.51 KB
页数:22页
时间:2019-09-07
《数据共享和成员特性(部分)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++面向对象程序设计第六章数据共享和成员特性陈春丽CCL@cugb.edu.cn第六章数据共享和成员特性6.1this指针6.2类的友元6.3类的静态成员6.4const成员6.1this指针隐含于每一个类的成员函数中的特殊指针识别成员函数当前操作的对象类的每个非静态成员函数都含有一个指向当前对象的指针,即this指针类的非静态成员函数中访问数据成员时,隐含形式是“this->数据成员名”this指针的使用classPoint{public:Point(intx=0,inty=0){xPos=x;y
2、Pos=y;}voidadd(Pointtwo){xPos+=two.xPos;yPos+=two.yPos;}voidprint(){cout<xPos//yPos等价于this->yPosvoidmain(){CPointpt(1,2),pt2(3,4);pt.add(pt2);pt.print();}pt.add(pt2);add(&pt,pt2);voidadd(Point*this,
3、Pointtwo)this->xPos+=two.xPos;6.2类的友元友元是C++提供的一种破坏数据封装和数据隐藏的机制外界只能访问类的public成员,通过friend修饰符,将一个模块声明为另一个模块的友元,则该友元能够引用到另一个模块中隐藏的信息可以使用友元函数和友元类为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元友元函数友元函数是在类声明中说明的非成员函数,由关键字friend修饰,该友元函数体中能够通过对象名访问private和protected成员作用:增加灵活
4、性,使程序员可以在封装和快速性方面做合理选择访问对象中的成员必须通过对象名例:计算两点距离(不用友元函数)#include#includeusingnamespacestd;classPoint{public:Point(intx=0,inty=0){xPos=x;yPos=y;}intgetX(){returnxPos;}intgetY(){returnyPos;}private:intxPos,yPos;};doubleDistance(Point&a,Point&
5、b){doubledx=a.getX()-b.getX();doubledy=a.getY()-b.getY();returnsqrt(dx*dx+dy*dy);}intmain(){Pointp1(3.0,5.0),p2(4.0,6.0);doubled=Distance(p1,p2);cout<<"Thedistanceis"<6、te:intxPos,yPos;};doubleDistance(Point&a,Point&b){doubledx=a.xPos-b.xPos;doubledy=a.yPos-b.yPos;returnsqrt(dx*dx+dy*dy);}intmain(){……}友元类若一个类为另一个类的友元,则此类的所有成员都能访问对方类的私有成员声明语法:将友元类名在另一个类中使用friend修饰说明友元关系是单向的若声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问7、B类的私有、保护数据classA{friendclassB;public:voidDisplay(){cout<8、初始化,用(::)来指明所属的类。例:具有静态数据成员的Point类classPoint{public:Point(intx=0,inty=0){xPos=x;yPos=y;countP++;}……voidgetC(){cout<<"Objectid="<
6、te:intxPos,yPos;};doubleDistance(Point&a,Point&b){doubledx=a.xPos-b.xPos;doubledy=a.yPos-b.yPos;returnsqrt(dx*dx+dy*dy);}intmain(){……}友元类若一个类为另一个类的友元,则此类的所有成员都能访问对方类的私有成员声明语法:将友元类名在另一个类中使用friend修饰说明友元关系是单向的若声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问
7、B类的私有、保护数据classA{friendclassB;public:voidDisplay(){cout<8、初始化,用(::)来指明所属的类。例:具有静态数据成员的Point类classPoint{public:Point(intx=0,inty=0){xPos=x;yPos=y;countP++;}……voidgetC(){cout<<"Objectid="<
8、初始化,用(::)来指明所属的类。例:具有静态数据成员的Point类classPoint{public:Point(intx=0,inty=0){xPos=x;yPos=y;countP++;}……voidgetC(){cout<<"Objectid="<
此文档下载收益归作者所有