第九章构造函数和析构函数_第1页
第九章构造函数和析构函数_第2页
第九章构造函数和析构函数_第3页
第九章构造函数和析构函数_第4页
第九章构造函数和析构函数_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、x) 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?,?f?);又例:#u

3、nclude “iosteam”class timepublic: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 ”:” secendl;msin()time t1;t1.set_time( );t1.show_time( );time t2;t2.set_time( )

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

5、类外定义time:time()hour=0;minute=0;sec=0;构造函数如何使用?构造函数的名字是什么?什么时间调用构造函数?构造函数有没有返回值?用户不定义构造函数, C+ 系统会自动生成一个构造函数,该函数是否有内容?带参数的构造函数和不带参数的构造函数使用上有什么不同?函数重载和构造函数重载的各自作用和不同地方是什么?11构造函数中的初始值是否一定为 0 ?12为什么要定义重载构造函数?(定义构造函数之后,不允许使用系统默认构造函数,若要使用必须从新显示说明)9 1 2 构造函数与对象初始化格式: 对象(实参) ; 或 对象;例 9-2:利用构造函数对对象初始化且输出/ex92

6、.h#include “iostream.h”class Demoint x,y;public:Demo(int a,int b)/建立构造函数x=a;y=b;Demo()/ 构造函数重载 x=10;y=20;void print ()cout ”x= ” xendl ”y= ” yprint ();Demo *p2=new Demo();p2-print ();delete p1;/ 释放或撤消动态对象delete p2;说明:定义动态对象可以使用另一种方法:demo *p1;p1=new demo( )或者:p1=new demo(3,5 )释放对象使用 delete9 1 4 使用默认(

7、缺省)参数的构造函数1 使用默认(缺省)参数的构造函数的好处2默认(缺省)参数的构造函数的定义方法方法一:#unclude “iosteam”class timepublic:time( ) ;/显式声明一个无参(默认)的构造函数time(int h,int m,int s) : hour(h), minute(m),sec(s); /声明一个有参的构造函数且初始化void set_time( );void show_time( );private:int hour;int minute;int sec;hour=8;int minute=0;int sec=0;void time:set_t

8、ime( )cinhour;cinminute;cinsec;void time:show_time( )couthour ”;” minute ”:” sechour;cinminute;cinsec;void time:show_time( )couthour ”;” minute ”:” secendl;msin()time t1;t1.set_time( );t1.show_time( );time t2;t2.set_time( );t2.show_time( );return 0; 说明:说明对象时,不给参数,就调用默认构造函数用默认构造函数定义对象时,要注意定义方法: time

9、tim1; 对象名后不能跟(定义对象时,根据参数个数调用不同的构造函数根据参数个数,还可以定义不同参数个数的构造函数(函数重载) : time(int h,int m) : hour(h), minute(m);time(int h) : hour(h);5一个类只能有一个默认的构造函数6类中定义了全部视默认参数的构造函数后,不能再定义重载构造函数7 注意 time(int h,int m,int s) : hour(h), minute(m),sec(s);time(int h,int m) : hour(h), minute(m);time(int h) : hour(h);构造函数的声明

10、和: time(int h=8,int m=0,int s=0) 构造函数的声明的差别前者参数个数固定,是重载构造函数,后者参数个数可变。9.2 析构函数用来撤消一个对象的。析构函数的定义:在定义类时: 类名(参数)在定义类外时:类名: :类名(参数)例:/ex96.h#include “iostream.h” class Demoint x,y;public Demo(int a,int b)/建立构造函数x=a;y=b;Demo()cout ” hello ” endl;void Print ()cout ”x= ” x ”/析构函数” y= ” yendl;/ex96.cpp#inclu

11、de “ex96.h”Demo d (10,20);Void main() void fun();Demo d1(3,5);d1.print();Fun(); d.print() /撤消dvoid fun() Demo d22=Demo(1,2),Demo(3,4);/对象数组for(int i=0;i3;i+) d2iprint();/撤消d2输出结果:d/ 定义对象d1d2d2/ 撤消对象d1dx=3y=5x=1y=2x=3y=4x=10y=20说明: 析构函数不仅释放对象,还可以执行程序体。 释放对象的次序是:先构造的后析构(先用的后释放) 。 3 对象的赋值和复制 3 1 对象的赋值#unclude “iosteam”class time public:time(int h=8,int m=0,int s=0) ; void set_time( );void show_ti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论