资源描述:
《c++之对象的初始化与销毁:构造函数与析构 函数.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、第四章对象的初始化与销毁:构造函数与析构函数本章主要内容:1.构造函数、拷贝构造函数——重点2.构造函数的初始化列表——重点、难点3.析构函数——重点总体要求:理解构造函数与析构函数的必要性与特殊性,掌握它们的使用方法§1对象的初始化1.成员变量全部公有时的初始化类的成员变量都是公有的,此时对该类对象的初始化可以与C中对结构体变量的初始化一样classperson{public:charname[15];intage;addressaddr;};classaddress{public:longtelenum;charaddr[30];};per
2、sonp1={"张三",23,{8911114,"LanZhouUniversity"}};缺点:数据完全外露,没有实现信息隐藏实质是对象中成员变量的初始化,有3种常见方法2.使用公有的成员函数完成对象的初始化在类中提供公有的成员函数,对象通过调用这样的成员函数对其内部的成员进行初始化例:银行帐户类classAccount{charsName[32];charsID[20];floatfBalance;public:voidInitialze(char*,char*,float);};voidAccount::Initialize(char*n
3、ame,char*id,floatamount){strcpy(sName,name);strcpy(sID,id);fBalance=amount;}voidmain(){Accountacc;acc.Initialize("张三","s9801",1000);}缺点:客户程序员容易忘记调用这样的函数,对象的初始化得不到保障3.构造函数(constructor)构造函数是类中特殊的成员函数,其函数名与类名相同创建对象时系统自动调用构造函数创建对象的两种方法:.定义类类型的变量.用new运算符动态产生对象无论用那种方法,都会自动调用构造函数——
4、不是由客户程序员人为调用,而是自动调用例:.银行帐户类.日期类把给成员变量赋初值的操作写在构造函数中,就能初始化成员变量:对象一旦被创建,马上调用构造函数,在能对对象进行其它操作之前,对象的成员变量已具有确定的值构造函数的特殊性与必要性函数名与类名相同在定义和声明时,不能说明构造函数的返回值类型,构造函数根本不返回任何值一个类的构造函数可以有多个:构造函数允许重载,一个构造函数对应一种创建对象的方法构造函数可以带有形参,也可以不带形参,创建对象时自动调用参数类型、数目均能匹配的一个。实参通过在创建对象时在对象名后的括号中传递给形参,若调用的是不
5、带参数的构造函数,则省略括号。无论带参与否,程序中都不能通过对象名或对象指针显式调用构造函数例:DatedtObj(2004,10,11);Date*pDtObj=newDate(2004,10,12);DatedtObjDft;Date*pDt=newDate;构造函数的特殊性与必要性(续)类中未显式提供构造函数时,C++会自动添加一个默认构造函数,该构造函数不带有形参,且函数体为空,在后台起作用;若类中显式提供了构造函数,则不再添加默认构造函数使用默认构造函数的情况下,若创建的对象是全局对象或静态对象,则成员变量的值全部被置为相应类型的0值
6、,否则成员变量的值不确定应尽可能提供自己的构造函数,而不使用默认的构造函数§2拷贝构造函数(copy-constructor)一种特殊的构造函数创建对象时,用一个已经存在的对象对新创建的同类对象进行初始化,此时要求构造函数的参数为自身类类型的引用,这种构造函数称为拷贝构造函数拷贝构造函数的一般形式为类名::类名([const]类名&引用名,…);一般情况下,多使用如下形式类名::类名([const]类名&引用名);其中const是可选的例:拷贝构造函数classA{public:A(int){cout<<"A()"<7、A&){cout<<"A(A&,int)"<8、A(1,2);returnA;}浅拷贝与深拷贝类中未显式提供拷贝构造函数时,C++会自动添加一个默认拷贝构造函数,该拷贝构造函数完成位对位的拷贝,亦即