第章构造函数和析构函数ppt课件.ppt

上传人:本田雅阁 文档编号:2585830 上传时间:2019-04-13 格式:PPT 页数:32 大小:240.51KB
返回 下载 相关 举报
第章构造函数和析构函数ppt课件.ppt_第1页
第1页 / 共32页
第章构造函数和析构函数ppt课件.ppt_第2页
第2页 / 共32页
第章构造函数和析构函数ppt课件.ppt_第3页
第3页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第章构造函数和析构函数ppt课件.ppt》由会员分享,可在线阅读,更多相关《第章构造函数和析构函数ppt课件.ppt(32页珍藏版)》请在三一文库上搜索。

1、第10章 构造函数和析构函数,10.1 构造函数 作用:定义对象时,可以简单地给对象赋初值。 10.1.1 如何定义构造函数 构造函数作为类中的函数出现。 构造函数的名字就是类名。 可以在函数定义中初始化对象。 例:方法一:在类中定义构造函数 格式: ( 参数 ) ,方法二:在类外定义构造函数 :( 参数 ) ,例10-1:定义构造函数 #include “string.h” class person private : char Name8; ansigned Age : 7; unsigned Sex : 1; public : person(char *name, int age , c

2、har sex) strcopy(Name,name); Age=age; Sex=(sex=m ? 0 : 1 );,person() ; / 函数重载 void Setname(char *name) strcopy(Name,name); void Setage(int age) Age=age; void Setsex(char sex) Sex=(sex=m ? 0 : 1 ); void Getname(char *name) (strcpy(name, Name); ) int Getage() retuen Age; char Getset() return (Sex=0? m

3、,f); ;,例11-2 使用构造函数完成数据的输入输出 #include “iostream.h“ class time public: time( ) /构造函数 hour=0; minute=0; sec=0; ,void set_time( ); /函数原型 void show_time( ); /函数原型 private: int hour; int minute; int sec; ;,void time:set_time( ) cinhour; cinminute; cinsec; void time:show_time( ) couthour“;“minute“:“secend

4、l; ,main() time t1; t1.set_time( ); t1.show_time( ); time t2; t2.show_time( ); return 0; ,程序执行过程: 定义对象t1,同时自动执行构造函数,对类中的成员赋初值。 执行t1.set_time( )函数,从键盘上给t1对象成员赋值。 执行t1.show_time( )函数,输出t1对象数据成员值。 定义对象t2,同时自动执行构造函数,对类中的成员赋初值。 执行t2.show_time( )函数,输出t2对象数据成员值。,问题: 如果不给对象成员赋值(第2步不执行),输出结果是什么? 如果没有构造函数,不给对

5、象成员赋值,输出结果又是什么? 构造函数如何定义?(类内和类外) time( ) /在类内进行函数声明 time:time() /在类外定义 hour=0; minute=0; sec=0; ,4. 构造函数如何使用? 5. 构造函数的名字是什么? 6. 什么时间调用构造函数? 7. 构造函数有没有返回值? 8. 用户不定义构造函数,C+系统会自动生成一个构造函数,该函数是否有内容? 9. 带参数的构造函数和不带参数的构造函数使用上有什么不同? 10. 函数重载和构造函数重载的各自作用和不同地方是什么? 11构造函数中的初始值是否一定为0? 12为什么要定义重载构造函数?(定义构造函数之后,不

6、允许使用系统默认构造函数,若要使用必须从新显示说明),10.1.2 构造函数与对象初始化 格式: 对象(实参); 或 对象; 例10-3:利用构造函数对对象初始化且输出 #include “iostream.h“ class demo int x,y; public: demo(int a,int b) /建立构造函数 x=a; y=b; demo() /构造函数重载 x=10; y=20; ,void print () cout“x=“xendl“y=“yendl; ; void main() demo d1(3,4); /定义对象并初始化 d1.print(); /对象和方法 demo d

7、2(7,9); /定义对象初始化 d2.print(); /对象和方法 demo d3; /定义对象初始化(空) d3.print(); ,10.1.3 构造函数和new运算符 new是用来创建动态变量,还可以动态创建对象。 例:以下例子是创建对象,其对象是由指针表示 #include “102.h” . void main() demo *p1=new Demo(3,5); /定义动态对象指针且对象初始化 p1-print (); demo *p2=new Demo(); p2-print (); delete p1; /释放或撤消动态对象 delete p2; ,说明: 定义动态对象可以使

8、用另一种方法: demo *p1; p1=new demo( ) 或者: demo *p1; p1=new demo(3,5 ) 释放对象使用delete,10.1.4 使用默认(缺省)参数的构造函数 1. 使用默认参数的构造函数的好处 2. 默认参数的构造函数的定义方法 例10-4 方法一: #include “iostream.h“ class time public: time( ); /显式声明一个无参(默认)的构造函数,time(int h,int m,int s):hour(h),minute(m),sec(s) time(int h,int m) : hour(h), minut

9、e(m),sec(0) time(int h) : hour(h),minute(0),sec(0) void set_time( ); void show_time( ); private: int hour; int minute; int sec; ;,time:time( ) /默认的构造函数 hour=8; int minute=0; int sec=0; void time:set_time( ) cinhour; cinminute; cinsec; ,void time:show_time( ) couthour“:“minute“:“secendl; main() time

10、t1; t1.set_time( ); t1.show_time( ); time t2; t2.show_time( );,time t3(6,6,6); t3.show_time( ); time t4(6,6); t4.show_time( ); time t5(6); t5.show_time( ); return 0; ,方法二: #include “iostream.h“ class time public: void set_time( ); void show_time( ); time(int h,int m,int s) /定义构造函数 hour=h; minute=m;

11、sec=s; ,time( ) /构造函数定义 hour=8; minute=0; sec=0; private: int hour; int minute; int sec; ;,void time:set_time( ) cinhour; cinminute; cinsec; void time:show_time( ) couthour“:“minute“:“secendl; ,main() time t1; t1.set_time( ); t1.show_time( ); time t2(12,20,0); t2.show_time( ); time t3; t3.show_time(

12、); return 0; ,说明: 1. 说明对象时,不给参数,就调用默认构造函数 2. 用默认构造函数定义对象时,要注意定义方法:time t1; 对象名后不能跟( ) 3. 定义对象时,根据参数个数调用不同的构造函数 4. 根据参数个数,还可以定义不同参数个数的构造函数(函数重载): time(int h,int m) : hour(h), minute(m); time(int h) : hour(h); 5一个类只能有一个默认的构造函数,6注意: time(int h,int m,int s) : hour(h), minute(m),sec(s); time(int h,int m)

13、 : hour(h), minute(m); time(int h) : hour(h); 构造函数的声明和:time(int h=8,int m=0,int s=0)构造函数的声明的差别 前者参数个数固定,是重载构造函数,后者参数个数可变。 小结: 1. 构造函数:带参数的构造函数:解决初始化的灵活性例10-1 2. 带参数的构造函数:解决对象的初始化, ,例10-2 3. 构造函数的重载:解决参数个数和类型不同的问题,例10-3 4. 使用默认参数的构造函数;解决初始化时参数个数问题,例10-4,10.2 析构函数 用来撤消一个对象的。 析构函数的定义: 在定义类时: 类名(参数) 在定义

14、类外时:类名:类名(参数) 例10-5: #include “iostream.h“ class Demo private: int x,y;,public: Demo(int a,int b) /建立构造函数 x=a; y=b; Demo() /函数重载 Demo() /析构函数 cout“hello“endl; void Print() cout“x=“x“ “y=“yendl; ;,Demo d(10,20); main() void fun(); Demo d1(3,5); d1.Print(); fun(); d.Print() ; /撤消d void fun() Demo d22=

15、Demo(1,2),Demo(3,4); /创建对象数组 for(int i=0;i3;i+) d2i.Print(); /撤消d2 ,输出结果: d /定义对象 d1 d20 d21 d21 /撤消对象 d20 d1 d x=3 y=5 x=1 y=2 x=3 y=4 x=10 y=20 说明: 析构函数不仅释放对象,还可以执行程序体。 释放对象的次序是:先构造的后析构(先用的后释放)。,10.3 对象的赋值和复制 10.3.1 对象的赋值 #unclude “iosteam” class time public: time(int h=8,int m=0,int s=0); void set_time( ); void show_time( ); private: int hour; int minute; int sec; ; time time1(10,10,10), time2; time2=time1;,10.3.2 对象的复制 time time1(10,10,10); time time2(time1); 或者: time time2=time1;,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1