构造函数析构函数带参数的构造函数默认参数的构造函数课件.ppt

上传人(卖家):三亚风情 文档编号:2862072 上传时间:2022-06-05 格式:PPT 页数:24 大小:230KB
下载 相关 举报
构造函数析构函数带参数的构造函数默认参数的构造函数课件.ppt_第1页
第1页 / 共24页
构造函数析构函数带参数的构造函数默认参数的构造函数课件.ppt_第2页
第2页 / 共24页
构造函数析构函数带参数的构造函数默认参数的构造函数课件.ppt_第3页
第3页 / 共24页
构造函数析构函数带参数的构造函数默认参数的构造函数课件.ppt_第4页
第4页 / 共24页
构造函数析构函数带参数的构造函数默认参数的构造函数课件.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎1. 构造函数构造函数是一种用于创建对象的特殊的成员函数构造函数是一种用于创建对象的特殊的成员函数: 1)当创建对象时,系统自动调用构造函数,不能直接调用当创建对象时,系统自动调用构造函数,不能直接调用; 2)构造函数名与类名相同构造函数名与类名相同; 3)一个类可以拥有多个构造函数(重载)一个类可以拥有多个构造函数(重载); 4)构造函数可以有任意类型的参数,但不能具有返回类型。构造函数可以有任意类型的参数,但不能具有返回类型。构造函数的作用是:构造函数的作用是: 为对象分配空间;

2、对数据成员赋初值;请求其他资源。为对象分配空间;对数据成员赋初值;请求其他资源。 如果一个类没有定义构造函数,编译器会自动生成一个不带参如果一个类没有定义构造函数,编译器会自动生成一个不带参数的默认构造函数,其格式如下:数的默认构造函数,其格式如下::()()/此构造函数只创建对象,不做初始化此构造函数只创建对象,不做初始化C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎#includeusing namespace std;class Pointprivate: int x,y;public: Point();/构造函数声明构造函数声明void print()coutx= x; y=

3、 yendl;Point:Point() /构造函数定义构造函数定义 x=0;y=1;coutConstruct is called!endl;void main() Point p1;/定义对象并自动调用构造函数定义对象并自动调用构造函数p1.print(); Construct is called!x= 0; y= 101对象对象p1C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎析构函数是一种用于销毁对象的特殊的成员函数析构函数是一种用于销毁对象的特殊的成员函数: 1)当一个对象作用域结束时,系统自动调用析构函数;)当一个对象作用域结束时,系统自动调用析构函数; 2)析构函数名字

4、为符号)析构函数名字为符号“”加类名;加类名; 3)析构函数没有参数和返回值。)析构函数没有参数和返回值。 4)一个类中只能定义一个析构函数,析构函数不能重载。)一个类中只能定义一个析构函数,析构函数不能重载。析构函数的作用是进行清除对象,释放内存等。析构函数的作用是进行清除对象,释放内存等。如同默认构造函数一样,如果一个类没有定义析构函数,编如同默认构造函数一样,如果一个类没有定义析构函数,编译器会自动生成一个默认析构函数,其格式如下:译器会自动生成一个默认析构函数,其格式如下::()()默认析构函数是一个空函数。默认析构函数是一个空函数。2. 析构函数析构函数C+程序设计 第四章 对象生灭

5、 沈阳航空工业学院 李照奎#includeusing namespace std;class Pointprivate: int x,y;public: Point();/构造函数声明构造函数声明Point();/析构函数声明析构函数声明void print()coutx= x;y= yendl;Point:Point() /构造函数定义构造函数定义x=0;y=1;coutConstruct is called!endl;Point:Point() /析构函数定义析构函数定义 coutDestruct is called! endl;void fun()cout对象对象p1:;Point p1

6、; p1.print();void main() fun();cout对象对象p2:;Point p2;p2.print(); 01对象对象p101对象对象p2对象对象p1:Construct is called!x= 0; y= 1Destruct is called!对象对象p2:Construct is called!x= 0; y= 1Destruct is called!C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎 不带参数的构造函数,其对象的初始化是固定的。要想在建立不带参数的构造函数,其对象的初始化是固定的。要想在建立对象时,传递一定的数据来进行初始化就要引入带参数的

7、构造对象时,传递一定的数据来进行初始化就要引入带参数的构造函数了。函数了。 如下例:如下例:#includeusing namespace std;class Pointprivate:int x,y;public: Point(int,int);/声明带参数的构造函数声明带参数的构造函数void print() coutx= x; y= yendl; ;3. 带参数的构造函数带参数的构造函数C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎Point:Point(int vx, int vy)x=vx ; y=vy; /用传递来的参数对私有变量用传递来的参数对私有变量x,y赋初值赋初值

8、coutConstruct is called!endl; void main() Point p1(10,10); /定义对象定义对象p1,并给构造函数传递实参,并给构造函数传递实参 p1.print(); Construct is called!x= 10; y= 101010对象对象p1C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎 在构造函数中允许指定函数参数的默认值,这些默认值在函数调用者不在构造函数中允许指定函数参数的默认值,这些默认值在函数调用者不确定参数时可以作为参数来使用。确定参数时可以作为参数来使用。对于所有参数都定义了默认值的构造函对于所有参数都定义了默认值的构

9、造函数,当它被调用时,允许改变传递参数的个数。数,当它被调用时,允许改变传递参数的个数。如下例:如下例:#includeusing namespace std;class Pointprivate: int x,y;public: Point(int vx=0,int vy=0 );/声明缺省参数的构造函数声明缺省参数的构造函数 void print() coutx= x; y= yendl; ; 4. 默认参数的构造函数默认参数的构造函数C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎Point:Point(int vx,int vy) x=vx ; y=vy; /用传递来的参数对私

10、有变量用传递来的参数对私有变量x,y赋初值赋初值 coutConstruct is called!endl;void main() Point p1(10,10);/传两参数传两参数 p1.print(); Point p2; /不传参数取缺省值不传参数取缺省值 p2.print(); Point p3(5); /传一个参数,第二个用缺省值传一个参数,第二个用缺省值 p3.print(); Construct is called!x= 10; y= 10Construct is called!x= 0; y= 0Construct is called!x= 5; y= 0 1010对象对象p1

11、00对象对象p250对象对象p3C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎 一个类中可以具有几个构造函数,每个都去适合不同的场合,一个类中可以具有几个构造函数,每个都去适合不同的场合,这些构造函数靠所带的参数类型或个数的不同来区分,实际上是对这些构造函数靠所带的参数类型或个数的不同来区分,实际上是对构造函数的重载。如下例:构造函数的重载。如下例: #includeusing namespace std;class Pointprivate: int x,y;public:Point(); /声明无参数的构造函数声明无参数的构造函数Point(int vy); /声明带声明带1个参

12、数的构造函数个参数的构造函数 Point(int vx,int vy ); /声明带声明带2个参数的构造函数个参数的构造函数void print() coutx= x; y= yendl; ;5. 构造函数的重载构造函数的重载C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎Point:Point() x=0;y=0; coutConstruct0 is called! endl; Point:Point(int vy) x=1;y=vy; coutConstruct1 is called! endl;Point:Point(int vx,int vy) x=vx ; y=vy; cou

13、tConstruct2 is called!endl; void main() Point p1; p1.print();Point p2(5); p2.print();Point p3(10,10); p3.print(); Construct0 is called!x= 0; y= 0Construct1 is called!x= 1; y= 5Construct2 is called!x= 10; y= 10 00对象对象p115对象对象p21010对象对象p3二义性二义性#includeusing namespace std;class Pointprivate: int x,y;pu

14、blic: Point(); /声明无参数的构造函数声明无参数的构造函数 /声明带声明带2个参数的构造函数个参数的构造函数 Point(int vx=2,int vy=2 ); void print() coutx= x ; y= yendl; ; 对象对象p在定义过程中,没有传递参数,此时有两种可能:第一是在创建对象时在定义过程中,没有传递参数,此时有两种可能:第一是在创建对象时调用不带参数的构造函数调用不带参数的构造函数Point()来对对象初始化;另一种是在创建对象时调来对对象初始化;另一种是在创建对象时调用带缺省参数的构造函数用带缺省参数的构造函数Point(int vx=2,int

15、vy=2)来初始化对象。来初始化对象。这两种这两种情况的存在使系统无法确定到底调用哪个构造函数,这就出现了二义性。编情况的存在使系统无法确定到底调用哪个构造函数,这就出现了二义性。编译将不能通过。译将不能通过。Point:Point() x=0;y=0; coutConstruct0 is called! endl;Point:Point(int vx,int vy) /用传递来的参数对私有变量用传递来的参数对私有变量x,y赋初值赋初值 x=vx ; y=vy; coutConstruct2 is called!endl;void main() Point p; p.print();C+程序设

16、计 第四章 对象生灭 沈阳航空工业学院 李照奎6. 类成员类成员类成员:类成员: 描述的是一个类内嵌其他类的对象作为描述的是一个类内嵌其他类的对象作为成员的情况,它们之间的关系是一种包成员的情况,它们之间的关系是一种包含与被包含的关系含与被包含的关系,常被称作组合关系。常被称作组合关系。 当创建类的对象时,如果这个类具有内当创建类的对象时,如果这个类具有内嵌对象成员,那么各个内嵌对象也将被嵌对象成员,那么各个内嵌对象也将被自动创建。自动创建。 在创建对象时,既要对本类的数据成员在创建对象时,既要对本类的数据成员进行初始化,又要对内嵌对象成员进行进行初始化,又要对内嵌对象成员进行初始化。初始化。

17、C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎#includeusing namespace std;class Pointint x;int y;public:Point();Point()cout析构点析构点:x-yendl;void print();Point:Point()x=10; y=12;cout构造点构造点:10-12; ;void Point:print()cout坐标坐标:x-yendl;CircleCircle的构造函数默认调用的构造函数默认调用PointPoint的无参构造函数的无参构造函数C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎class C

18、irclePoint centre;double radius;public:Circle(double);Circle()cout析构圆析构圆:析构半径析构半径 radiusn;void print();Circle:Circle(double vr)coutn构造圆构造圆:构造半径构造半径 vrn;radius=vr;void Circle:print()centre.print();cout半径半径=radiusendl;void main()Circle c(4.3);c.print();构造点构造点:10-12;构造圆构造圆:构造半径构造半径 4.3坐标坐标:10-12半径半径=4.

19、3析构圆析构圆:析构半径析构半径 4.3析构点析构点:10-121020对象对象c类成员类成员4.3C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎#includeusing namespace std;class Pointint x;int y;public:Point(int vx=0,int vy=0);Point()cout析构点析构点:x-yendl;void print();Point:Point(int vx,int vy)cout构造点构造点:vx - vy; ;x=vx; y=vy;void Point:print()cout坐标坐标:x-yendl;初始化的困惑初

20、始化的困惑C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎class CirclePoint centre; double radius;public:Circle(int,int,double);Circle()cout析构圆析构圆:析构半径析构半径 radiusn;void print();Circle:Circle(int vvx,int vvy,double vr)coutn构造圆构造圆:构造半径构造半径 vrn;radius=vr;Point centre(vvx,vvy);void Circle:print()centre.print();cout半径半径=radiusen

21、dl;void main()Circle c(2,2,4.3); c.print();构造点构造点:0-0;构造圆构造圆:构造半径构造半径 4.3构造点构造点:2-2; 析构点析构点:2-2坐标坐标:0-0半径半径=4.3析构圆析构圆:析构半径析构半径 4.3析构点析构点:0-022对象对象centre00对象对象c类成员类成员4.3C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎#includeusing namespace std;class Pointint x;int y;public:Point(int vx=0,int vy=0);Point()cout析构点析构点:x-y

22、endl;void print();Point:Point(int vx,int vy)cout构造点构造点:vx-vy; ;x=vx; y=vy;void Point:print()cout坐标坐标:x-yendl;构造类成员的机制构造类成员的机制C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎class CirclePoint centre; double radius;public:Circle(int,int,double);Circle()cout析构圆析构圆:析构半径析构半径 radiusn;void print();Circle:Circle(int vvx,int vv

23、y,double vr):centre(vvx,vvy)coutn构造圆构造圆:构造半径构造半径 vr; ;radius=vr;void Circle:print()centre.print();cout半径半径=radiusendl;void main()Circle c(2,2,4.3); c.print();构造点构造点:2-2;构造圆构造圆:构造半径构造半径 4.3; 坐标坐标:2-2半径半径=4.3析构圆析构圆:析构半径析构半径 4.3析构点析构点:2-222对象对象c类成员类成员4.3C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎q 冒号语法初始化常量成员和引用数据成员冒

24、号语法初始化常量成员和引用数据成员class SillyClasspublic:SillyClass(int& i):ten(10),refI(i)protected:const int ten;int& refI;q 初始化一般数据成员初始化一般数据成员class SillyClasspublic:SillyClass(int vd) d=vd;protected:int d; class SillyClasspublic:SillyClass(int vd) :d(vd)protected:int d;C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎7. 对象构造与析构的顺序对象构

25、造与析构的顺序q局部对象,以声明的顺序构造,析构的顺序与构造顺序相反局部对象,以声明的顺序构造,析构的顺序与构造顺序相反q静态对象只被构造一次,在程序运行结束时析构。静态对象只被构造一次,在程序运行结束时析构。q所有全局对象在主函数所有全局对象在主函数main()之前被构造,在程序运行结束时析构之前被构造,在程序运行结束时析构class A int x;public:A(int vx)x=vx;coutxA构造构造 ;A()coutxA析构析构 ;class B int y;public:B(int vy)y=vy;coutyB构造构造 ;B()coutyB析构析构 ;class C int

26、z;public:C(int vz)z=vz;coutzC构造构造 ;C()coutzC析构析构 ;C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎void func(int i)coutnfunc: ;A a(i);static B b(i+1);C c(i+2);A a(100);void main()coutnmain: ;A a(1);B b(2);C c(3);func(4); func(7);coutnmain: ;100A构造构造main: 1A构造构造 2B构造构造 3C构造构造func: 4A构造构造 5B构造构造 6C构造构造 6C析构析构 4A析构析构func:

27、7A构造构造 9C构造构造 9C析构析构 7A析构析构main: 3C析构析构 2B析构析构 1A析构析构 5B析构析构 100A析构析构C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎q 成员对象的构造顺序按类定义的出现顺序,最后执行自身构造函数成员对象的构造顺序按类定义的出现顺序,最后执行自身构造函数: : 析构的顺序与构造顺序相反析构的顺序与构造顺序相反class Aint x;public:A(int vx)x=vx;coutA:xn; A()coutA:xn;class Bint y;public:B(int vy)y=vy;coutB:yn; B()coutB:yn;C+程序设计 第四章 对象生灭 沈阳航空工业学院 李照奎class CA a;B b;public:C(int vx,int vy):a(vx),b(vy)coutC:n;C()coutC:n;void main()C c(1,3);A:1B:3C:C:B:3A:1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(构造函数析构函数带参数的构造函数默认参数的构造函数课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|