欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《类组合成员初始化》PPT课件.ppt

    • 资源ID:5640913       资源大小:260.99KB        全文页数:31页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《类组合成员初始化》PPT课件.ppt

    1,C+中,提供了用一个对象值创建并初始化另一个对象的方法,完成该功能的是拷贝构造函数。例如:Tdate d1(2002,3,1);Tdate d2(d1);用构造函数创建d1 的值初始化新创建的对象d2。拷贝构造函数的特点:1、拷贝构造函数名字与类同名,没有返回类型;2、拷贝构造函数只有一个形参数,该参数是该类的对象的引用;,拷贝构造函数(Copy Constructor),拷贝构 造 函 数,2,3、拷贝构造函数的格式如下::(/拷贝构造函数,拷贝构 造 函 数,3,int xcoord()return x;int ycoord()return y;private:int x,y;Tpoint:Tpoint(Tpoint,拷贝构 造 函 数,4,void main()Tpoint p1(5,7);Tpoint p2(p1);cout“p2=”p2.xcoord()“,”p2.ycoord()endl;,结果:Copy_initialization constructor called.P2=5,7,拷贝构 造 函 数,5,注意:如果一个类中没有定义拷贝构造函数,则系统自动生成一个缺省拷贝构造函数,其功能是将已知对象的所有数据成员的值拷贝给对应对象的数据成员。,class A float x,y;public:A(float a,float b)x=a;y=b;cout调用了构造函数n;void Print()coutxtyendl;,拷贝构 造 函 数,6,调用了构造函数1.02.01.02.01.02.0,void main(void)A a1(1.0,2.0);A a2(a1);A a3=a1;/可以这样赋值 a1.Print();a2.Print();a3.Print();,拷贝构 造 函 数,7,拷贝构造函数举例,class Point public:Point(int xx=0,int yy=0)X=xx;Y=yy;Point(Point,拷贝构 造 函 数,8,拷贝构造函数调用,(1)当用类的一个对象去初始化该类的另一个对象时系统自动调用拷贝构造函数实现拷贝赋值。void main(void)Point A(1,2);Point B(A);/拷贝构造函数被调用 coutB.GetX()endl;,拷贝构 造 函 数,9,(2)若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。例如:void fun1(Point p)coutp.GetX()endl;void main()Point A(1,2);fun1(A);/调用拷贝构造函数,拷贝构 造 函 数,10,(3)当函数的返回值是类对象时,系统自动调用拷贝构造函数。例如:Point fun2()Point A(1,2);return A;/调用拷贝构造函数void main()Point B;B=fun2();,拷贝构 造 函 数,11,注意:,如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成一个拷贝构造函数。这个构造函数执行的功能是:用作为初始值的对象的每个数据成员的值,初始化将要建立的对象的对应数据成员。,拷贝构 造 函 数,12,构造函数和析构函数举例,#includeusing namespace std;class Point public:Point(int xx,int yy);Point();/.其它函数原形 private:int X,int Y;Point:Point(int xx,int yy)X=xx;Y=yy;Point:Point()/.其它函数的实现略,构 造 函 数 和 析 构 函 数,13,构造函数和析构函数调用举例,#include using namespace std;class Q int x,y;public:Q(int a=0,int b=0)cout“调用了构造函数”endl;x=a;y=b;void P(void)coutxtyn;Q()cout“调用了析构函数!”n;,void main(void)Q q(50,100);q.P();cout“退出主数!”n”;,输出:调用了构造函数50 100退出主函数!调用了析构函数!,构 造 函 数 和 析 构 函 数,14,类的应用举例,一圆型游泳池如图所示,现在需在其周围建一圆型过道,并在其四周围上栅栏。栅栏价格为35元/米,过道造价为20元/平方米。过道宽度为3米,游泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。,构 造 函 数 和 析 构 函 数,15,#include using namespace std;const float PI=3.14159;const float FencePrice=35;const float ConcretePrice=20;class Circle/声明类Circle 及其数据和方法 private:float radius;public:Circle(float r);/构造函数 float Circumference();/圆周长 float Area();/圆面积;Circle:Circle(float r)/构造函数初始化数据成员radiusradius=r;float Circle:Circumference()/计算圆的周长 return 2*PI*radius;float Circle:Area()/计算圆的面积 return PI*radius*radius;,构 造 函 数 和 析 构 函 数,16,void main()float radius;float FenceCost,ConcreteCost;coutradius;Circle Pool(radius);/声明 Circle 对象 Circle PoolRim(radius+3);FenceCost=PoolRim.Circumference()*FencePrice;/计算栅栏造价并输出 cout Fencing Cost is¥FenceCost endl;ConcreteCost=(PoolRim.Area()-Pool.Area()*ConcretePrice;/计算过道造价并输出 cout Concrete Cost is¥ConcreteCost endl;,运行结果Enter the radius of the pool:10Fencing Cost is¥2858.85Concrete Cost is¥4335.3,构 造 函 数 和 析 构 函 数,17,#include“tpoint.h”Tpoint fun(Tpoint q);void main()Tpoint M(12,20),P(0,0),S(0,0);Tpoint N(M);P=fun(N);S=M;cout“P=”P.xcoord()“,”P.ycoord()endl;cout“S=”S.xcoord()“,”S.ycoord()endl;Tpoint fun(Tpoint q)cout“OKn”;int x=q.xcoord()+10;int y=q.ycoord()+15;,18,Tpoint R(x,y);return R;/tpoint.h#include class Tpoint public:Tpoint(int xp,int yp)x=xp;y=yp;Tpoint(Tpoint,19,Tpoint:Tpoint(Tpoint输出结果如下:Copy_initialization constructor called.Copy_initialization constructor called.OKCopy_initialization constructor called.Destructor called.Destructor called.Destructor called.,20,P=22,35 S=12,20 Destructor called.Destructor called.Destructor called.Destructor called.程序输出结果说明程序中出现了三次调用构造函数:Tpoint N(M);/M 对象创建N 对象P=fun(N);/实参N 对象被拷贝到形参q对象return R;/函数返回时,调用拷贝构造函数,用对象R创建/一个临时对象,保存R 的数据,在主函数中临/时对象被释放前,将它的内容赋值到对象P 中。,临时对象起暂存作用的情况如下图所示:,21,组合的概念,类中的成员数据是另一个类的对象。可以在已有的抽象的基础上实现更复杂的抽象。通过对复杂对象进行分解、抽象,使我们能够将一个复杂对象理解为简单对象的组合;分解得到复杂对象的部件对象,这些部件对象比它高层的复杂对象更容易理解和实现,然后由这些部件对象了“装配”复杂对象,类 的 组 合,22,例如:#include class Student public:Student()cout“Constructing student.n”;semeshours=100;gpa=3.5;,23,Student()cout“Destructing student.n”;protected:int semeshours;float gpa;class Teacher public:Teacher()cout“Constructing teacher.n”;,24,Teacher()cout“Destructing teacher.n”;class Tutorpair public:Tutorpair()cout“Constructing tutorpair.n”;nomeetings=0;Tutorpair()cout“Destructing tutorpair.n”;,25,protected:Student student;Teacher teacher;int nomeetings;void main()Tutorpair tp;cout“Back in main.n”;,Constructing student.,Constructing teacher.,Constructing tutorpair.,Back in main.,Destructing tutorpair.,Destructing teacher.,Destructing student.,运行结果:,26,举例,class Point private:float x,y;/点的坐标 public:Point(float h,float v);/构造函数 float GetX(void);/取X坐标 float GetY(void);/取Y坐标 void Draw(void);/在(x,y)处画点;/.函数的实现略,class Line private:/线段的两个端点 Point p1,p2;public:/构造函数 Line(Point a,Point b);/画出线段 Void Draw(void);/.函数的实现略,类 的 组 合,27,类组合的构造函数设计,原则:不仅要负责对本类中的基本类型成员数据赋初值,也要对对象成员初始化。声明形式:类名:类名(对象成员所需的形参,本类成员形参):对象1(参数),对象2(参数),.本类初始化,类 的 组 合,28,类组合构造函数实例,Point(int xx=0,int yy=0)x=xx;y=yy;Line:Line(Point a,Point b,double p):p1(a),p2(b)double x=double(p1.GetX()-p2.GetX();double y=double(p1.GetY()-p2.GetY();dist=sqrt(x*x+y*y);price=p;,类 的 组 合,29,类组合的构造函数调用,构造函数调用顺序:先调用内嵌对象的构造函数(按内嵌时的声明顺序,先声明者先构造)。然后调用本类的构造函数。(析构函数的调用顺序相反)若调用默认构造函数(即无形参的),则内嵌对象的初始化也将调用相应的默认构造函数。,类 的 组 合,30,类的组合举例1,#include#include using namespace std;class Point private:float x,y;/点的坐标 public:Point(float xx,float yy)cout“Point构造函数”endl;x=xx;y=yy;Point(Point,类 的 组 合,31,class Distance private:Point p1,p2;/线段的两个端点 double dist;public:Distance(Point a,Point b);/构造函数 double GetDis(void)return dist;Distance:Distance(Point a,Point b):p1(a),p2(b)cout“Distance构造函数”endl;double x=double(p1.GetX()-p2.GetX();double y=double(p1.GetY()-p2.GetY();dist=sqrt(x*x-y*y);void main()Point myp1(1,1),myp2(4,5);Distance myd(myp1,myp2);cout“the distance is:”;coutmyd.GetDis()endl;,类 的 组 合,

    注意事项

    本文(《类组合成员初始化》PPT课件.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开