第六章 数据共享和成员特性(部分)

上传人:油条 文档编号:24932375 上传时间:2017-12-08 格式:PPT 页数:22 大小:431.50KB
返回 下载 相关 举报
第六章 数据共享和成员特性(部分)_第1页
第1页 / 共22页
第六章 数据共享和成员特性(部分)_第2页
第2页 / 共22页
第六章 数据共享和成员特性(部分)_第3页
第3页 / 共22页
第六章 数据共享和成员特性(部分)_第4页
第4页 / 共22页
第六章 数据共享和成员特性(部分)_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《第六章 数据共享和成员特性(部分)》由会员分享,可在线阅读,更多相关《第六章 数据共享和成员特性(部分)(22页珍藏版)》请在金锄头文库上搜索。

1、C+面向对象程序设计第六章 数据共享和成员特性,陈春丽CCL,第六章 数据共享和成员特性,6.1 this指针6.2 类的友元6.3 类的静态成员6.4 const成员,6.1 this指针,隐含于每一个类的成员函数中的特殊指针识别成员函数当前操作的对象类的每个非静态成员函数都含有一个指向当前对象的指针,即this指针类的非静态成员函数中访问数据成员时,隐含形式是“this-数据成员名”,this指针的使用,class Pointpublic: Point( int x = 0, int y = 0 ) xPos = x;yPos = y; void add( Point two) xPos

2、+= two.xPos; yPos += two.yPos; void print() cout xPos /yPos等价于 this- yPos,void main() CPoint pt(1, 2), pt2(3, 4); pt.add( pt2 ); pt.print();,6.2 类的友元,友元是C+提供的一种破坏数据封装和数据隐藏的机制外界只能访问类的public成员,通过friend修饰符,将一个模块声明为另一个模块的友元,则该友元能够引用到另一个模块中隐藏的信息可以使用友元函数和友元类为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元,友元函数,友元函数是在

3、类声明中说明的非成员函数,由关键字friend修饰,该友元函数体中能够通过对象名访问 private 和 protected成员作用:增加灵活性,使程序员可以在封装和快速性方面做合理选择访问对象中的成员必须通过对象名,例:计算两点距离(不用友元函数),#include #include using namespace std;class Point public:Point(int x=0, int y=0) xPos=x;yPos=y;int getX() return xPos;int getY() return yPos;private:int xPos, yPos;,double Di

4、stance( Point,例:使用友元函数计算两点距离,class Point public: friend double Distance(Point int main() ,友元类,若一个类为另一个类的友元,则此类的所有成员都能访问对方类的私有成员声明语法:将友元类名在另一个类中使用friend修饰说明友元关系是单向的若声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有、保护数据,class A friend class B;public: void Display() coutxendl;private: int x;class B

5、public: void Set(int i) a.x=i; void Display(); a.Display();private: A a;,6.3 类的静态成员,静态成员:解决同一个类的不同对象之间数据和函数的共享例如:雇员总数这个值为雇员类的所有对象所共享静态数据成员用关键字static声明该类的所有对象维护该成员的同一个拷贝必须在类外初始化,用(:)来指明所属的类。,例:具有静态数据成员的 Point类,class Point public: Point(int x=0, int y=0) xPos=x; yPos=y; countP+; void getC() cout Objec

6、t id=countPendl;private:int xPos,yPos;static int countP;int Point:countP=0;,void main()Point A(4,5), B(3,2);coutPoint A,A.getX(),A.getY();A.getC();coutPoint B,B.getX(),B.getY();B.getC();,程序的运行结果为:Point A,4,5 Object id=1Point B,3,2 Object id=2,静态成员函数静态成员函数是专门引用属于该类的静态数据成员或静态成员函数的函数例如:定义了静态数据成员:雇员总数,但

7、是该成员为私有,必须定义公有函数成员来实现雇员总数加一、输出值等功能类外代码可以使用类名和作用域操作符来调用静态成员函数,静态成员函数举例,#includeusing namespace std;class Application public: static void f(); static void g();private: static int global;int Application:global=0;,void Application:f() global=5; void Application:g() coutglobalendl; int main() Application

8、:f(); Application:g(); return 0;,class A public: static void f(A a); private: int x;void A:f(A a) coutx; /对x的引用是错误的 couta.x; /正确,静态成员函数举例:,访问非静态数据成员必须通过参数传递方式得到对象名,然后通过对象名访问,具有静态数据、函数成员的 Point类,class Point public: Point(int x=0, int y=0) xPos=x; yPos=y; countP+; static void getC() cout“ id=countPend

9、l;private:int xPos,yPos;static int countP;int Point:countP=0;,int main()/主函数实现Point A(4,5);/声明对象AA.getC();/输出对象号,对象名引用Point:getC();/输出对象号,类名引用,6.4 const成员,常类型的对象必须进行初始化,而且不能被更新常引用:被引用的对象不能被更新。const 类型说明符 &引用名常对象:该对象的数据成员值在对象的整个生存期间内不能被改变。即必须进行初始化,且不能被更新类名 const 对象名,例:常引用作形参,#includevoid display(cons

10、t double ,常对象举例,class Apublic: A(int i,int j) x=i; y=j; .private: int x,y;A const a(3,4); /a是常对象,不能被更新,用const修饰的对象成员,常成员函数:使用const关键字说明的函数常成员函数不更新对象的数据成员只能调用const常成员函数常成员函数说明格式:类型说明符 函数名(参数表)const;这里,const是函数类型的一个组成部分,因此在实现部分也要带const关键字。const关键字可以被用于参与对重载函数的区分如void print(); 和void print() const;重载常数据

11、成员使用const说明的数据成员,例:常成员函数举例,#includeusing namespace std;class R public: R(int r1, int r2)R1=r1;R2=r2; void print(); void print() const;private: int R1,R2;,void R:print() coutR1:R2endl; void R:print() const coutR1;R2endl; int main() R a(5,4); a.print(); /调用void print() const R b(20,52); b.print(); /调用void print() const,例:常数据成员举例,#includeusing namespace std;class Apublic:A(int i);void print();const int,const int A:b=10; A:A(int i):a(i),r(a) void A:print() couta:b:rendl; int main() /*建立对象a和b,并以100和0作为初值,分别调用构造函数,通过构造函数的初始化列表给对象的常数据成员赋初值*/ A a1(100),a2(0); a1.print(); a2.print();,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号