C++构造与析构函数.ppt

上传人:wuy****n92 文档编号:80428842 上传时间:2023-03-23 格式:PPT 页数:46 大小:275.99KB
返回 下载 相关 举报
C++构造与析构函数.ppt_第1页
第1页 / 共46页
C++构造与析构函数.ppt_第2页
第2页 / 共46页
点击查看更多>>
资源描述

《C++构造与析构函数.ppt》由会员分享,可在线阅读,更多相关《C++构造与析构函数.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第4讲 构造函数与析构函数u构造函数定义构造函数定义构造函数具有构造函数的类如何创建对象具有构造函数的类如何创建对象u析构函数u复制构造函数1 构造函数构造函数constructor(对对象的初始化象的初始化)u构造函数是每个类都具有的一种特殊函数,有以下三特点:构造函数是每个类都具有的一种特殊函数,有以下三特点:构造函数的名字必须与类名相同;构造函数的名字必须与类名相同;构造函数没有函数构造函数没有函数(返回返回)类型类型不是不是void;在创建对象时,构造函数才被系统自动调用,在创建对象时,构造函数才被系统自动调用,不能被用户显式调用。不能被用户显式调用。Circle类增加构造函数类增加构

2、造函数class Circleprivate:double radius;public:Circle(double);double getArea();double getRadius();void setRadius(double);Circle:Circle(double newRadius)radius=newRadius;1-1 构造函数构造函数Constructor(1)默认构造函数默认构造函数default constructoru若若在在类类中中没没有有显显式式地地定定义义构构造造函函数数,则则编编译译器器会会自自动动提提供供一一个个不不带带参参数数、函函数数体体为为空空(即即不

3、不做做任任何何事事情情)的的默默认认构构造函数造函数。:()()u此此时时,在在程程序序中中创创建建一一个个对对象象时时,编编译译器器调调用用默默认认构构造造函函数来初始化该对象。数来初始化该对象。u若若程程序序中中有有自自定定义义的的构构造造函函数数,则则编编译译器器就就不不会会再再生生成成默默认认构构造造函函数数(因因此此不不能能再再使使用用),此此时时必必须须使使用用自自定定义义的构造函数创建对象。的构造函数创建对象。(2)(2)自定义构造函数自定义构造函数u若类中显式自定义若类中显式自定义了构造函数,此时系了构造函数,此时系统将不再提供默认的统将不再提供默认的无参构造函数。无参构造函数

4、。class Cylinderdouble r,h;public:Cylinder(double,double);void setv(double,double);void getv(double&,double&);double surface();double volume();Cylinder:Cylinder(double rr,double hh)r=rr;h=hh;void Cylinder:setv(double rr,double hh)r=rr;h=hh;void Cylinder:getv(double&rr,double&hh)rr=r;hh=h;double Cylin

5、der:surface()return 3.14*r*r*2+2*3.14*r*h;double Cylinder:volume()return 3.14*r*r*h;Date:Date(int y=1900,int m=1,int d=1)/默认参数默认参数year=y;month=m;day=d;注:若有默认参数又有重载注:若有默认参数又有重载函数时,可能出现二义性。函数时,可能出现二义性。u构造函数可以重载,构造函数可以重载,可带默认的参数值,可内联可带默认的参数值,可内联.Date:Date()/无参无参重载重载year=1900;month=1;day=1;Date:Date(int

6、 y,int m,int d)year=y;month=m;day=d;构造函数构造函数的说明的说明u创建对象时系统创建对象时系统1)1)为对象的数据成员分配存储空间,为对象的数据成员分配存储空间,2)2)调用构造函数调用构造函数(可以是默认构造函数可以是默认构造函数),执行构造函,执行构造函数体中的代码。数体中的代码。u由于由于构造函数在创建新对象时被系统自动调用,而且构造函数在创建新对象时被系统自动调用,而且类的数据成员多为类的数据成员多为privateprivate,因此,因此可在构造函数中进行可在构造函数中进行数据成员的初始化数据成员的初始化,将构造函数的参数值赋给对象的,将构造函数的

7、参数值赋给对象的数据成员,从而在创建对象时进行初始化。数据成员,从而在创建对象时进行初始化。u每个类都具有构造函数每个类都具有构造函数,没有定义构造函数的类,系,没有定义构造函数的类,系统自动提供默认构造函数统自动提供默认构造函数(什么都不做,空函数什么都不做,空函数)u警告:一个常见的错误是在构造函数前放置一个警告:一个常见的错误是在构造函数前放置一个void。1-2 因为创建对象时系统要调用构造函数,则必须根据构因为创建对象时系统要调用构造函数,则必须根据构造函数形式创建对象造函数形式创建对象(创建对象时为构造函数提供实参创建对象时为构造函数提供实参)(1)使用不带参数的构造函数创建对象时

8、,对象的创建形式为:使用不带参数的构造函数创建对象时,对象的创建形式为:类名类名 对象名;或:对象名;或:类名类名 对象名对象名=类名类名();如:如:Circle cir1;或:或:Circle cir1=Circle();u注意:注意:Circle a();/错,错,声明了一个函数名为声明了一个函数名为a,返回值为,返回值为Circle类的对象。类的对象。#includevoid main()Circle cir1;cout cir1.getRadius();coutcir1.getArea();class Circleprivate:double radius;public:Circle

9、();double getArea();double getRadius();void setRadius(double);Circle:Circle()radius=1;注:若不定义构造函数,则使用系统注:若不定义构造函数,则使用系统提供的默认构造函数创建对象,此时提供的默认构造函数创建对象,此时对象的数据成员的值均为随机值。对象的数据成员的值均为随机值。Circle类定义无参构造函数类定义无参构造函数_单文件单文件#includevoid main()Circle cir1;cout cir1.getRadius();coutcir1.getArea();class Circlepriva

10、te:double radius;public:Circle();double getArea();double getRadius();void setRadius(double);Circle:Circle()radius=1;double Circle:getArea()return radius*radius*3.14159;double Circle:getRadius()return radius;void Circle:setRadius(double r)radius=r;Circle类定义无参构造函数类定义无参构造函数_多文件多文件#include circle.h#incl

11、udevoid main()Circle cir1;cout cir1.getRadius();coutcir1.getArea();/*class declaration,circle.h*/class Circleprivate:double radius;public:Circle();double getArea();double getRadius();void setRadius(double);/circle.cpp#include circle.hCircle:Circle()radius=1;double Circle:getArea()return radius*radiu

12、s*3.14159;double Circle:getRadius()return radius;void Circle:setRadius(double r)radius=r;使用带参数构造函数创建对象使用带参数构造函数创建对象(必须为构造函数提供实参必须为构造函数提供实参)/*class declaration,circle.h*/class Circleprivate:double radius;public:Circle(double);double getArea();double getRadius();void setRadius(double);Circle:Circle(do

13、uble newRadius)radius=newRadius;#include circle.h#includevoid main()Circle cir2(2);coutcir2.getRadius()endl;coutcir2.getArea()endl;u对象的创建形式为:对象的创建形式为:类名类名 对象名对象名(初始化参数表初始化参数表);或:或:类名类名 对象名对象名=类名类名(初始化参数表初始化参数表);注:由于类中只定义了带参构造函数,则系统不会再提供默注:由于类中只定义了带参构造函数,则系统不会再提供默认构造函数,因此不能再使用第认构造函数,因此不能再使用第1种方式创建对象。

14、种方式创建对象。Circle cir1;/wrongError:no appropriate default constructor availableCircle类定义有参构造函数类定义有参构造函数_多文件多文件#include circle.h#includevoid main()Circle cir2(2);cout cir1.getRadius();coutcir1.getArea();/*class declaration,circle.h*/class Circleprivate:double radius;public:Circle(double);double getArea(

15、);double getRadius();void setRadius(double);/circle.cpp#include circle.hCircle:Circle(double newRadius)radius=newRadius;double Circle:getArea()return radius*radius*3.14159;double Circle:getRadius()return radius;void Circle:setRadius(double r)radius=r;重载构造函数重载构造函数u 此时可根据构造函数的形式采用多种形式创建不同的对象。此时可根据构造函数

16、的形式采用多种形式创建不同的对象。class Circleprivate:double radius;public:Circle();Circle(double);double getArea();double getRadius();void setRadius(double);#includevoid main()Circle cir1;Circle cir2(2);coutcir1.getRadius()endl;coutcir1.getArea()endl;coutcir2.getRadius()endl;coutcir2.getArea()endl;Circle:Circle()ra

17、dius=1;Circle:Circle(double newRadius)radius=newRadius;Circle类定义重载构造函数类定义重载构造函数_多文件多文件#include circle.h#includevoid main()Circle cir1,cir2(2);coutcir1.getRadius()endl;coutcir1.getArea()endl;coutcir2.getRadius()endl;coutcir2.getArea()endl;/*class declaration,circle.h*/class Circleprivate:double radiu

18、s;public:Circle();Circle(double);double getArea();double getRadius();void setRadius(double);/circle.cpp#include circle.hCircle:Circle()radius=1;Circle:Circle(double newRadius)radius=newRadius;double Circle:getArea()return radius*radius*3.14159;double Circle:getRadius()return radius;void Circle:setRa

19、dius(double r)radius=r;使用带默认参数的构造函数使用带默认参数的构造函数/circle.hclass Circleprivate:double radius;public:Circle(double=1);double getArea();double getRadius();void setRadius(double);/testCircle.cpp#include circle.h#includevoid main()Circle cir1;Circle cir2(2);coutcir1.getRadius()endl;coutcir1.getArea()endl;c

20、outcir2.getRadius()endl;coutcir2.getArea()endl;Circle cir2=Circle(2);Circle*p=new Circle(3);delete p;Circle:Circle(double newRadius)radius=newRadius;#include circle.h#includevoid main()Circle cir1,cir2(2);coutcir1.getRadius()endl;coutcir1.getArea()endl;coutcir2.getRadius()endl;coutcir2.getArea()endl

21、;/*class declaration,circle.h*/class Circleprivate:double radius;public:Circle(double=1);double getArea();double getRadius();void setRadius(double);/circle.cpp#include circle.hCircle:Circle(double newRadius)radius=newRadius;double Circle:getArea()return radius*radius*3.14159;double Circle:getRadius(

22、)return radius;void Circle:setRadius(double r)radius=r;Circle类定义带默认参数构造函数类定义带默认参数构造函数_多文件多文件 注意注意:若在类中同时定义了带默认参数的构造函数与无参构造:若在类中同时定义了带默认参数的构造函数与无参构造函数,要注意避免出现歧义性函数,要注意避免出现歧义性(二义性二义性)而产生编译错误。而产生编译错误。warning C4520:Circle:multiple default constructors specifiederror C2668:Circle:Circle:ambiguous call to

23、 overloaded functionclass Circleprivate:double radius;public:Circle();/无参无参Circle(double=1)/带默认参数带默认参数double getArea();double getRadius();void setRadius(double);errorclass Cylinderdouble r,h;public:Cylinder();Cylinder(double,double=5);void setv(double,double);void getv(double&,double&);double surfac

24、e();double volume();Cylinder:Cylinder()r=2;h=2;Cylinder:Cylinder(double rr,double hh)r=rr;h=hh;正确正确构造函数的另一种写法:构造函数初始化列表构造函数的另一种写法:构造函数初始化列表构造函数主要用来对类的数据成员进行初始化,即将构构造函数主要用来对类的数据成员进行初始化,即将构造函数的参数值传送给数据成员,可将构造函数定义为造函数的参数值传送给数据成员,可将构造函数定义为 :数据成员名数据成员名(参数名参数名)Circle:Circle(double r):radius(r)Date:Date(in

25、t y,int m,int d):year(y),month(m),day(d)函数体中可以有语句,进行其它的初始化操作u若类中没有定义任何形式的构造函数,系统自动生成若类中没有定义任何形式的构造函数,系统自动生成默认的无参构造函数。默认的无参构造函数。u若类中定义了构造函数,则编译器就不会再提供默认若类中定义了构造函数,则编译器就不会再提供默认的无参构造函数,必须使用自定义的构造函数创建对象的无参构造函数,必须使用自定义的构造函数创建对象,否则出现语法错误。,否则出现语法错误。u若要使用多种形式的构造函数创建对象,则必须:若要使用多种形式的构造函数创建对象,则必须:重载构造函数,即在类定义中

26、增加无参和有参构重载构造函数,即在类定义中增加无参和有参构造函数的定义。造函数的定义。定义带默认参数的构造函数。定义带默认参数的构造函数。u构造函数与构造函数与setset函数函数注意:创建对象时必须考虑构造函数的形式注意:创建对象时必须考虑构造函数的形式 2 析构函数析构函数Destructoru与与构构造造函函数数相相对对。当当创创建建一一个个对对象象时时:1)1)为为其其数数据据成成员员分分配配存存储储空空间间,2)2)其其构构造造函函数数被被调调用用;而而对对象象的的生生命命期期结结束束时时:1)1)析析构函数被调用构函数被调用,2)2)释放为其分配的存储空间释放为其分配的存储空间。u

27、析析构构函函数数名名是是在在类类名名前前面面加加上上符符号号“”,析析构构函函数数没没有有参参数数和返回值和返回值。所以所以不能重载不能重载,一个类一个类只能定义一个析构函数只能定义一个析构函数u析析构构函函数数的的作作用用并并不不是是删删除除对对象象,而而是是在在撤撤销销对对象象占占用用的的内内存存之前完成一些清理工作。通常是释放已分配的内存空间。之前完成一些清理工作。通常是释放已分配的内存空间。u如如果果没没有有显显式式定定义义析析构构函函数数,那那么么编编译译器器为为每每个个类类定定义义一一个个默默认的析构函数。每个类都有构造函数和析构函数。认的析构函数。每个类都有构造函数和析构函数。若

28、类中不定义析构函数,则系统自动生成一个不做任何事情的默若类中不定义析构函数,则系统自动生成一个不做任何事情的默认析构函数认析构函数(是一个空函数是一个空函数)。:()()#include circle.h#includevoid main()Circle cir1,cir2(2);/*class declaration,circle.h*/class Circleprivate:double radius;public:Circle(double=1);Circle();double getArea();double getRadius();void setRadius(double);/ci

29、rcle.cpp#include circle.hCircle:Circle(double newRadius)radius=newRadius;cout“Constructor of Radius=“radiusendl;Circle:Circle()cout“Destructor of Radius=“radiusendl;double Circle:getArea()return radius*radius*3.14159;double Circle:getRadius()return radius;void Circle:setRadius(double r)radius=r;析构函数

30、举例:析构函数举例:Circle类定义析构函数类定义析构函数_多文件多文件注意构造函数和析构函数的执行顺序注意构造函数和析构函数的执行顺序:先构造的后析构,后构造的先析构先构造的后析构,后构造的先析构运行结果:运行结果:Constructor of Radius=1Constructor of Radius=2Destructor of Radius=2Destructor of Radius=1析构函数举例:日期类析构函数举例:日期类CDate/date.hclass CDatepublic:CDate(int y,int m,int d);CDate();void Print();priv

31、ate:int year,month,day;/date.cpp#include#include“date.h”CDate:CDate(int y,int m,int d)year=y;month=m;day=d;coutConstructor called.n;CDate:CDate()coutDestructor call.n;void CDate:Print()coutyear/month/dayendl;/testDate.cpp#include#include“date.h”void main()CDate day1(1997,4,20),day2(1998,3,6);day1.Pr

32、int();day2.Print();运行结果:运行结果:Constructor called.Constructor called1997/4/201998/3/6Destructor call.Destructor call.注意构造函数和析构函数的注意构造函数和析构函数的执行顺序执行顺序.栈结构栈结构LIFO注意注意u所有的类中都应包含构造函数和析构函数,且是由系所有的类中都应包含构造函数和析构函数,且是由系统自动调用的。如果在类中没有给出定义,则系统会统自动调用的。如果在类中没有给出定义,则系统会为其建立缺省构造为其建立缺省构造/析构函数。析构函数。一般来讲,在创建对象时都要进行初始化

33、,因此类中都要定义构造函数;而析构函数的定义则可根据需要给出。当程序终止时,所有对象都会被销毁。但是如果对象的存储空间在栈stack中,则不能编写代码显式地销毁。只有动态创建于堆heap中的对象,才能用delete操作符显式地销毁。因此如果在构造函因此如果在构造函数中进行了动态内存资源的申请,则必须定义析构函数完数中进行了动态内存资源的申请,则必须定义析构函数完成内存的释放成内存的释放.析构函数应用:整型数组类析构函数应用:整型数组类CArrayclass CArray public:CArray(int size);/创建包含创建包含size个数组元素的整型数组。个数组元素的整型数组。CAr

34、ray();/析构函数,删除动态申请的数组空间析构函数,删除动态申请的数组空间 int getAt(int nIndex);/得到下标为得到下标为nIndex的数组元素的值的数组元素的值 void setAt(int nIndex,int newElement);/将下标为将下标为nIndex的数组元素的值设置为的数组元素的值设置为newElement.private:int*data;/整型数组首地址整型数组首地址 int size;/数组中的元素个数数组中的元素个数;CArray类的声明部分类的声明部分array.h#includearray.hCArray:CArray(int s)si

35、ze=s;data=new intsize;CArray:CArray()delete data;int CArray:getAt(int nIndex)return datanIndex;void CArray:setAt(int nIndex,int newElement)datanIndex=newElement;CArrayCArray类的实现部分类的实现部分array.cpp构造函数和析构函构造函数和析构函数都是由系统自动数都是由系统自动调用的,在程序中调用的,在程序中定义一个对象,则定义一个对象,则系统调用它的构造系统调用它的构造函数为其数据成员函数为其数据成员分配存储空间;当分配

36、存储空间;当对象生命期结束时,对象生命期结束时,系统先调用其析构系统先调用其析构函数,而后收回该函数,而后收回该对象所占用的内存对象所占用的内存空间。所以析构函空间。所以析构函数是在撤销对象占数是在撤销对象占用的内存之前完成用的内存之前完成一些清理工作。一些清理工作。testArray.cpp#include array.h#include void main()CArray t(5);for(int i=0;i5;i+)t.setAt(i,i+1);for(i=0;i5;i+)coutt.getAt(i)endl;u复制构造函数是特殊的构造函数,具有一般构造函数的特性复制构造函数是特殊的构造

37、函数,具有一般构造函数的特性(在在创建新对象时才被调用创建新对象时才被调用)。u函数名同类名,且只有一个形参,该形参是函数名同类名,且只有一个形参,该形参是本类对象的引用本类对象的引用,从而从而用一个已经存在的对象用一个已经存在的对象(由复制构造函数的参数指定的对象)(由复制构造函数的参数指定的对象),去初始化另一个正创建的同类的对象去初始化另一个正创建的同类的对象。class 类名类名 public:类名类名(形参表形参表);/构造函数构造函数类名类名(类名类名&对象名对象名);/复制构造函数复制构造函数;类名类名:类名类名(类名类名&对象名对象名)/复制构造函数的实现复制构造函数的实现 函

38、数体函数体注:形参是本类对象的引用注:形参是本类对象的引用注:形参是本类对象的引用注:形参是本类对象的引用3-1 复制构造函数复制构造函数copy constructor创建对象时,要么调用构造函数,要么调用复制构造函数创建对象时,要么调用构造函数,要么调用复制构造函数class Circleprivate:double radius;public:Circle(double=1);Circle(Circle&);double getArea();double getRadius();void setRadius(double);Circle:Circle(double newRadius)r

39、adius=newRadius;Circle:Circle(Circle&c)radius=c.radius;double Circle:getArea()return radius*radius*3.14159;double Circle:getRadius()return radius;void Circle:setRadius(double r)radius=r;#includevoid main()Circle cir1(2);/构造函数构造函数Circle cir2(cir1);/复制构造函数复制构造函数coutcir1.getRadius()endl;coutcir1.getAre

40、a()endl;coutcir2.getRadius()endl;coutcir2.getArea()endl;/point.hclass CPointprivate:int x,y;public:CPoint(int xx=0,int yy=0);CPoint(CPoint&p);int getX();int getY();复制构造函数例复制构造函数例CPoint类类/point.cpp#include“point.h”CPoint:CPoint(int xx,int yy)x=xx;y=yy;CPoint:CPoint(CPoint&p)x=p.x;y=p.y;int CPoint:get

41、X()return x;int CPoint:getY()return y;3-2 复制构造函数在以下三种情况下被调用(从无到有):复制构造函数在以下三种情况下被调用(从无到有):1)用一个已存在的对象去初始化正创建的该类的另一个对象时。用一个已存在的对象去初始化正创建的该类的另一个对象时。#include class CPointprivate:int x,y;public:CPoint(int xx=0,int yy=0)/构造函数构造函数 x=xx;y=yy;CPoint(CPoint&p);/复制构造函数复制构造函数int getX()return x;int getY()return

42、 y;CPoint:CPoint(CPoint&p)/复制构造函数的定义复制构造函数的定义x=p.x;y=p.y;void main()CPoint A(1,2);CPoint B(A);coutB.getX()endl;注:该例中类的声明与实注:该例中类的声明与实现及类的使用放在同一个现及类的使用放在同一个.cpp.cpp文件中。文件中。CPoint B(A);或或CPoint B=A;3)3)如果函数的返回值是类的对象,函数执行完成返回调用者时。如果函数的返回值是类的对象,函数执行完成返回调用者时。CPoint f()CPoint A(1,2);return A;void main()CP

43、oint B;B=f();2)2)如果函数的形参是类对象,如果函数的形参是类对象,调用调用函数时将实参的值传递给形参时。函数时将实参的值传递给形参时。void f(CPoint p)coutp.getX()endl;void main()CPoint A(1,2);f(A);u创建对象时,要么调用构造函数,要么调用复制构造函数创建对象时,要么调用构造函数,要么调用复制构造函数。复复制构造函数制构造函数用一个已经存在的对象用一个已经存在的对象(由复制构造函数的参数指定(由复制构造函数的参数指定的对象),的对象),去初始化另一个正创建的同类的对象去初始化另一个正创建的同类的对象。将已有对象的。将已

44、有对象的数据成员的值复制给正在创建的另一个同类的对象,以实现同类数据成员的值复制给正在创建的另一个同类的对象,以实现同类对象之间数据成员的数据传递。对象之间数据成员的数据传递。(本类对象的复制本类对象的复制)u每个类都有构造函数、析构函数和复制构造函数每个类都有构造函数、析构函数和复制构造函数,如果定义类,如果定义类时没有给出它们的定义,则系统自动为类提供默认的。系统自动时没有给出它们的定义,则系统自动为类提供默认的。系统自动提供的默认构造函数和析构函数为空函数,什么都不做,而默认提供的默认构造函数和析构函数为空函数,什么都不做,而默认的复制构造函数可实现将参数对象的每个数据成员值复制给新建的

45、复制构造函数可实现将参数对象的每个数据成员值复制给新建对象中相应的数据成员。如果定义类时定义了它们,则系统不再对象中相应的数据成员。如果定义类时定义了它们,则系统不再提供。提供。3-3复制构造函数说明复制构造函数说明#include class CPointprivate:int x,y;public:CPoint(int xx=0,int yy=0)/构造函数构造函数x=xx;y=yy;int getX()return x;int getY()return y;void main()point p1(10,20);point p2(p1);coutp1.getX()endl;coutp2.g

46、etX()endl;说明:说明:每一个类都有一个复制构造函数,若类中没有自定义复制每一个类都有一个复制构造函数,若类中没有自定义复制构造函数,则系统提供一个缺省的复制构造函数,该缺省复制构构造函数,则系统提供一个缺省的复制构造函数,该缺省复制构造函数完成将一个对象的所有数据成员的值复制到另一个对象中造函数完成将一个对象的所有数据成员的值复制到另一个对象中的相应操作。的相应操作。说说明明:CPointCPoint类类中中没没有有定定义义复复制制构构造造函函数数,则则调调用用系系统统的的缺缺省省复复制制构构造造函函数数,将将p1p1对对象象的的各各数数据据成成员员的的值值都都拷拷贝贝给给了了p2p

47、2对对象象相相应应成成员员;因因此此p2p2对对象象的的数数据据成成员员的的值值与与p1p1对象的相同。对象的相同。注:该例中类的声明注:该例中类的声明与实现及类的使用放与实现及类的使用放在同一个在同一个.cpp.cpp文件中。文件中。复制构造函数例复制构造函数例Circle类类_多文件多文件/circle.hclass Circleprivate:double radius;public:Circle(double=1);Circle(Circle&);double getArea();double getRadius();void setRadius(double);/circle.cpp

48、#include circle.hCircle:Circle(double newRadius)radius=newRadius;Circle:Circle(Circle&c)radius=c.radius;double Circle:getArea()return radius*radius*3.14159;double Circle:getRadius()return radius;void Circle:setRadius(double r)radius=r;/testCircle.cpp#include circle.h#includevoid main()Circle cir1(2)

49、;Circle cir2(cir1);coutcir1.getRadius()endl;coutcir1.getArea()endl;coutcir2.getRadius()endl;coutcir2.getArea()endl;u默认的复制构造函数简单地将参数对象的每个数据成员复默认的复制构造函数简单地将参数对象的每个数据成员复制给新建对象中相应的数据成员。制给新建对象中相应的数据成员。class Circleprivate:double radius;public:Circle(double=1);double getArea();double getRadius();void setRa

50、dius(double);Circle:Circle(double newRadius)radius=newRadius;double Circle:getArea()return radius*radius*3.14159;double Circle:getRadius()return radius;void Circle:setRadius(double r)radius=r;#includevoid main()Circle cir1(2);Circle cir2(cir1);coutcir1.getRadius()endl;coutcir1.getArea()endl;coutcir2

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁