ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:19.96KB ,
资源ID:5445186      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5445186.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第5章 类和对象2.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第5章 类和对象2.docx

1、第5章 类和对象25.5 静态成员局部变量:一般来讲就是具有块作用域的变量。如果把数据存储在局部变量中,函数在不同的块之间只能通过参数传递来共享数据。优点:在不同的函数体内互相不可见,很好地实现了函数之间的数据隐藏缺点:比较适合共享少量数据。全局变量:在整个程序中,除了在定义有同名局部变量之外,都可以进行直接访问。优点:实现了数据的共享缺点:无法对数据的访问权限进行有效的控制。例5.13#include int global;void f( global=5; cout void g( global=6; cout void fun( int global=10; cout void main

2、( f ( ;g ( ;fun( ;cout 执行结果:56106全局变量在整个程序中(除了在定义有同名局部变量之外都是可见的。为了安全起见,不使用全局变量,而使用静态数据成员。5.5.1 静态数据成员静态数据成员可以实现多个对象之间的数据共享,并且不会破坏安全性。静态数据成员是属于所有对象的。静态数据成员的使用方法:1.静态数据成员在定义或说明时前面加static关键字。例如:class Nclass private:int a,b,c;static int n;2.静态数据成员是静态存储的,必须进行初始化。格式:数据类型 类名:静态数据成员名=值;例如:class Nclass priva

3、te:int a,b,c;static int n;int Nclass:n=10;3.静态数据成员不专属于任何一个对象,属于类。如果访问权限允许的话(public),访问时可用:类名:静态数据成员名例5.14#include class Myclass public:Myclass(int a,int b,int c;void GetNumber( ;void GetSum( ;private:int A,B,C;static int Sum; /静态数据成员说明;int Myclass:Sum=0; /静态数据成员初始化Myclass:Myclass(int a,int b,int c数据

4、成员2(参数,cout”Number=”TDate3:TDate3(int y,int m,int d” ”cout”:Constructor called.n”; 可以:TDate3:TDate3(int y,int m,int d:year(y,month(m,day(dSum= cout ” :Constructor called.n ”void main( 例M.GetNumber( ;N.GetNumber( ;M.GetSum( ;N.GetSum( ;A(int x:a(x Number=3,7,class BNumber=14B(int x,int y:aa(x,b(y Sum

5、=54Sum=54”aa=例5.15#include class Countprivate:public:Count( ;void main( void Shows输出:aa=3private:b=5以上不能:static int sum; aa.a=x; b=y; int Count:sum=100;void main( Count c1;c1.Showsum( ;5.3.3 拷贝初始化构造函数c4.Showsum( ;功能:输出:格式:类名:拷贝初始化构造函数名(const 类名 &引用名Showsum( sum的。要输出只能通过某个对象来调用函数Showsum( 3.如果类中没有说明拷贝

6、初始化构造函数,则系统自动生成一个缺省拷贝初始化构造函数。例5.9 5.5.2/tpoint1.h为了解决这个问题,如果TPoint(int x,int yX=x;Y=y;了TPoint(TPoint &p;sum;编译错误。因为对普通成员函数的调用必须通过对象名。 cout采用静态成员函数来解决上述问题。例int Xcoord( return X;int Ycoord( return Y; public:Count( int X,Y;TPoint:TPoint(TPoint &p X=p.X;sum +;”Copy_initialization Constructor Called.n”;c

7、out ”tpoint1.h” static int sum;int Count:sum=100;coutvoid main(P2=” ” , c1.Showsum( ; 输出:Copy_initialization Constructor Called.输出:1005.10 拷贝初始化构造函数的其他用法。”tpoint1.h1.TPoint f(TPoint Q;关键字声明的成员函数。2.同静态数据成员一样,静态成员函数属于整个类,为所有对象所共享。P(0,0;对于公有的静态成员函数,可以通过类名或对象名来调用;而一般的非静态成员函数只能通过对象名来调用。 P=f(N;cout”P=”静态成

8、员函数可以直接访问该类的静态数据和函数成员;而访问非静态数据成员,必须通过参数传递方式得到对象名,然后通过对象名来访问。举例说明:例5.17 cout”static void f1(M m;int x,y;int A;static int B;输出:Copy_initialization Constructor Called.void M:f1(M m Copy_initialization Constructor Called.coutB=B 直接 Ok Copy_initialization Constructor Called.void main( 释放对象QDestructor Cal

9、led. 释放匿名对象P=30,55Destructor Called. A=5B=15Destructor Called.释放对象PDestructor Called. 释放对象M例 5.18 王婆卖西瓜。 每卖一个瓜,计算出该瓜的重量、总重量、总个数,还允许退瓜。 1.明确表示由一个对象初始化另一个对象。class Watermelon public:2.P=f(N;3.当对象作为函数返回值时。系统用返回值初始化一个匿名对象时使用了拷贝初始化构造函。return R;total_number+;5.4 成员函数的特性Watermelon( 一般成员函数void display( ;特殊成员

10、函数 private:float weight;5.4.1 内联函数和外联函数内联函数:定义在类体内的成员函数。外联函数:说明在类体内,定义在类体外的成员函数。int Watermelon:total_number=0;void Watermelon:display( 例5.11class A public: cout A(int x,int yX=x;Y=y; 内联函数 int a( return X; 内联函数 cout”Total weight is:” int X,Y;inline int A:c( void main( Watermelon w1(3.5;void main( Wat

11、ermelon:total_disp( ;Watermelon w2(4.5;cout”Watermelon:total_disp( ;Watermelon w3(5.6;w3.display( ;输出:d( return:85.4.2 5class MM(int x,int yX=x;Y=y;M(int xX=x;Y=x*x; int Add(int x,int y;int Add(int x; 5.6.1友元函数int Xout( return X;int Yout( return Y;private:int X,Y; X=x; Y=y; return X+Y;int M:Add(int

12、x X=Y=x; return X+Y;int M:Add( return X+Y;#include cout”cout”a=” ” ” ” cout”double getx( return x;double gety( return y;private:double x,y;double distance(Point &a,Point &30 double dx=a.getx( -b.getx( ;double dy=a.gety( -b.gety( ;return sqrt(dx*dx+dy*dy;void main( Point p1(3.0,4.0, p2(6.0,8.0;p1.Get

13、xy( ;p2.Getxy( ;cout”Distance is ”distance(p1,p2 输出:(3.0,4.0(6.0,8.0Distance is 5分析:disntance( 这个函数是一个普通函数,如果想访问类的私有成员,必须通过类的接口函数getx( 和gety( 来实现。缺点:成员函数多次调用,由于参数传递、类型检查和安全性检查需要时间开销,程序的运行效率不高。有没有办法使类外的函数直接访问私有数据成员呢?有,使用友元函数。例5.20使用友元函数。#include #include class Point public:Point(double m,double n x=m

14、;y=n;void Getxy( cout”(“ ” , ” ” ” friend double distance(Point &a,Point &b;private:double x,y;double distance(Point &a,Point &b double dx=a.x-b.x;double dy=a.y-b.y; return sqrt(dx*dx+dy*dy;void main( Point p1(3.0,4.0, p2(6.0,8.0;p1.Getxy( ;p2.Getxy( ;cout”Distance is ”distance(p1,p212 time.hours-=1

15、2;cout ” : ” ”PM” elsecout ” : ” ”AM” void Time24(Time time cout ” : ” void main( Time Time1(20,30,Time2(10,45;Time12(Time1;Time24(Time1;Time12(Time2;Time24(Time2;输出:8:30PM 20:3010:45AM10:45在本例中,友元函数是一个普通函数,同样,这个函数也可以是另外一个类的成员函数。5.6.2友元类同函数一样,类也可以声明为另一个类的友元,这时称为友元类。若A类为B类的友元类,则A类的所有成员都是B类的友元函数,都可以访问

16、B类的私有和保护成员。例5.22 分析下列程序的输出结果:#include class X friend class Y; /Y类是X类的友元类public:void Set(int ix=i; void Display( cout”x=” ” ,y= ” private:int x;static int y; ;class Y public:Y(int i,int j a.x=i; X:y=j;void Display( cout”x=” ” , y= ” private:X a;int X:y=1;void main( X b;b.Set(5;b.Display( ;Y c(6,9;c.D

17、isplay( ;b.Display( ;输出:x=5,y=1x=6,y=9x=5,y=9说明:1.一般来说,在一个类的成员函数中,不能引用另一个类的私有成员,但在友元类中可以。2.X类的y是静态成员,通过Y类的对象c改变了它的值后,将仍然保存其值,在X类的对象b中,y成员的值仍然是改变后的值。可见,Y类对象与X类对象共用静态成员y。注意:1.友元关系不能传递。B类是A类的友元,C类是B类的友元,C类和A类之间,如果没有声明,就没有任何关系,不能进行数据共享。2.友元关系是单向的。B类是A类的友元,B类的成员函数可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有和保护数据。5.

18、7 类的作用域类的作用域(类域:类的定义中由一对花括号括起来的部分。在类域中定义的变量不能使用auto,register和extern等修饰符。类域包含在文件域中。5.8 局部类和嵌套类5.8.1 局部类局部类:在一个函数体内定义的类。例如:int a;void fun( static int s;class A; public:void init(int is=i;A m;m.init(10;5.8.2 嵌套类嵌套类:在一个类中定义的类。例如:class A public:class B public:private:;void f( ;private:int a;5.9 对象的生存期对象的

19、生存期:指对象从被创建到被释放为止的时间。按生存期可分:1.局部对象:当对象被定义时调用构造函数,当程序退出定义该对象所在的函数体或程序块时,释放对象。2.静态对象:当程序第一次执行所定义的静态对象时,该对象被创建,当程序结束时,该对象被释放。3.全局对象:当程序开始时,调用构造函数创建对象,当程序结束时,该对象被释放。局部对象定义在函数体或程序块内。静态对象定义在一个文件中。全局对象定义在某个文件中。例5.23 不同对象的生存期#include #include class A public:A(char *st strcpy(string,st;cout”Constructor calle

20、d for” A( cout”Destructor called for” private:char string50;void fun( A FunObject(“FunObject”; 局部对象static A staticObject(“StaticObject”;静态对象cout”In fun( .” A GlobalObject(“GlobalObject”; 全局对象void main( A MainObject(“MainObject”; 局部对象cout”In main( ,befor called funn”;fun( ;cout”In main( ,after called

21、 funn”;输出:Constructor called for GlobalObjectConstructor called for MainObjectIn main( ,befor called funConstructor called for FunObjectConstructor called for StaticObjectIn fun( .Destructor called for FunObjectIn main( ,after called funDestructor called for MainObjectDestructor called for StaticObj

22、ectDestructor called for GlobalObject作业:1.设立一个立方体类Box,在该类定义中包括:数据成员:length,width和height。成员函数:(1Box( 设置盒子的长、宽和高;(2volume( 计算盒子的体积;(3area( 计算盒子的表面积;(4disp( 输出盒子的体积和表面积。在main( 中创建对象,求盒子的体积和表面积,输出体积和表面积。2.定义一个Book类,在该类定义中包括:数据成员:bookname,price和number;成员函数:(1Book( 为对象赋初值。(2display( 显示图书的情况。3.遍写一个程序,输入N个学生数据,包括学号、姓名、成绩、要求输出这些学生数据并计算平均分。4.第5章后面的作业题四。练习:第5章后面的练习题和作业题一、二、三。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1