第九章構造函數(shù)和析構函數(shù)_第1頁
第九章構造函數(shù)和析構函數(shù)_第2頁
第九章構造函數(shù)和析構函數(shù)_第3頁
第九章構造函數(shù)和析構函數(shù)_第4頁
第九章構造函數(shù)和析構函數(shù)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第九章 構造函數(shù)和析構函數(shù)9 1 構造函數(shù)作用:定義創(chuàng)建對象方法,并可以簡單地給對象賦初值。9 1 1 如何定義構造函數(shù)1 構造函數(shù)作為類中的函數(shù)出現(xiàn)。2 構造函數(shù)的名字就是類名。3 可以在函數(shù)定義中初始化對象。例:方法一:在類中定義構造函數(shù)格式:( 參數(shù))方法二:在類外定義構造函數(shù) : : ( 參數(shù) )例:定義構造函數(shù)/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() ;/ 函數(shù)重載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;程序執(zhí)行過程:定義對象 t1, 同時自動執(zhí)行構造函數(shù),對類中的成員賦初值執(zhí)行t1.set_time( ) 函數(shù),從鍵盤上給t1對象成員賦值執(zhí)行t1.show_time( ) 函數(shù),輸出t1 對象數(shù)據(jù)成員值定義對象 t2, 同時自動執(zhí)行構造函數(shù),對類中的成員賦初值執(zhí)行t2.set_time( ) 函數(shù),從鍵盤上給t2對象成員賦值執(zhí)行t2.show_time( ) 函數(shù),輸出t2 對象數(shù)據(jù)成員值問題:如果不給對象成員賦值( 2 步不執(zhí)行) ,輸出結果是什么?如果沒有構造函數(shù),不給對象成員賦值,輸出結果又是什么?構造函數(shù)如何定義?(類內(nèi)和類外)/在

5、類外定義time:time()hour=0;minute=0;sec=0;構造函數(shù)如何使用?構造函數(shù)的名字是什么?什么時間調(diào)用構造函數(shù)?構造函數(shù)有沒有返回值?用戶不定義構造函數(shù), C+ 系統(tǒng)會自動生成一個構造函數(shù),該函數(shù)是否有內(nèi)容?帶參數(shù)的構造函數(shù)和不帶參數(shù)的構造函數(shù)使用上有什么不同?函數(shù)重載和構造函數(shù)重載的各自作用和不同地方是什么?11構造函數(shù)中的初始值是否一定為 0 ?12為什么要定義重載構造函數(shù)?(定義構造函數(shù)之后,不允許使用系統(tǒng)默認構造函數(shù),若要使用必須從新顯示說明)9 1 2 構造函數(shù)與對象初始化格式: 對象(實參) ; 或 對象;例 9-2:利用構造函數(shù)對對象初始化且輸出/ex92

6、.h#include “iostream.h”class Demoint x,y;public:Demo(int a,int b)/建立構造函數(shù)x=a;y=b;Demo()/ 構造函數(shù)重載 x=10;y=20;void print ()cout ”x= ” xendl ”y= ” yprint ();Demo *p2=new Demo();p2-print ();delete p1;/ 釋放或撤消動態(tài)對象delete p2;說明:定義動態(tài)對象可以使用另一種方法:demo *p1;p1=new demo( )或者:p1=new demo(3,5 )釋放對象使用 delete9 1 4 使用默認(

7、缺省)參數(shù)的構造函數(shù)1 使用默認(缺省)參數(shù)的構造函數(shù)的好處2默認(缺省)參數(shù)的構造函數(shù)的定義方法方法一:#unclude “iosteam”class timepublic:time( ) ;/顯式聲明一個無參(默認)的構造函數(shù)time(int h,int m,int s) : hour(h), minute(m),sec(s); /聲明一個有參的構造函數(shù)且初始化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; 說明:說明對象時,不給參數(shù),就調(diào)用默認構造函數(shù)用默認構造函數(shù)定義對象時,要注意定義方法: time

9、tim1; 對象名后不能跟(定義對象時,根據(jù)參數(shù)個數(shù)調(diào)用不同的構造函數(shù)根據(jù)參數(shù)個數(shù),還可以定義不同參數(shù)個數(shù)的構造函數(shù)(函數(shù)重載) : time(int h,int m) : hour(h), minute(m);time(int h) : hour(h);5一個類只能有一個默認的構造函數(shù)6類中定義了全部視默認參數(shù)的構造函數(shù)后,不能再定義重載構造函數(shù)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);構造函數(shù)的聲明

10、和: time(int h=8,int m=0,int s=0) 構造函數(shù)的聲明的差別前者參數(shù)個數(shù)固定,是重載構造函數(shù),后者參數(shù)個數(shù)可變。9.2 析構函數(shù)用來撤消一個對象的。析構函數(shù)的定義:在定義類時: 類名(參數(shù))在定義類外時:類名: :類名(參數(shù))例:/ex96.h#include “iostream.h” class Demoint x,y;public Demo(int a,int b)/建立構造函數(shù)x=a;y=b;Demo()cout ” hello ” endl;void Print ()cout ”x= ” x ”/析構函數(shù)” 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);/對象數(shù)組for(int i=0;i3;i+) d2iprint();/撤消d2輸出結果:d/ 定義對象d1d2d2/ 撤消對象d1dx=3y=5x=1y=2x=3y=4x=10y=20說明: 析構函數(shù)不僅釋放對象,還可以執(zhí)行程序體。 釋放對象的次序是:先構造的后析構(先用的后釋放) 。 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論