C面向對象程序設計-第2章-類和對象(一)課件_第1頁
C面向對象程序設計-第2章-類和對象(一)課件_第2頁
C面向對象程序設計-第2章-類和對象(一)課件_第3頁
C面向對象程序設計-第2章-類和對象(一)課件_第4頁
C面向對象程序設計-第2章-類和對象(一)課件_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章類和對象(一)類對象構造函數(shù)析構函數(shù)一個對象的生存期對象淺復制與深復制靜態(tài)成員類成員指針應用實例練習題2上機實驗題2第2章類和對象(一)類對象構造函數(shù)析構函數(shù)一個對象的生存類類的聲明類的組織形式類的作用域類的成員函數(shù)類的訪問權限類與結構體類型的區(qū)別類的特點類類的聲明類的組織形式類的作用域類的成員函數(shù)類的訪問權限類與類的聲明類是一種用戶自定義的數(shù)據(jù)類型,聲明類的一般格式如下:class類名{private:

私有數(shù)據(jù)成員和成員函數(shù);protected:

保護數(shù)據(jù)成員和成員函數(shù);public:

公有數(shù)據(jù)成員和成員函數(shù);};各個成員函數(shù)的實現(xiàn);類界面類實現(xiàn)在聲明類時有如下規(guī)則:如果類的成員是變量,可以像聲明變量一樣聲明它。如果類的成員是函數(shù),一般是使用函數(shù)原型來聲明它。如果類的成員是函數(shù),它可以訪問類中的任何成員——數(shù)據(jù)成員和成員函數(shù)。也就是說,當聲明類的成員函數(shù)時,定義的函數(shù)可以直接訪問該類中任何成員而無需將其聲明為參數(shù),惟一的限制條件是在使用一個成員之前必須聲明它。類的聲明類是一種用戶自定義的數(shù)據(jù)類型,聲明類的一般格式如下類的組織形式通常將類界面與類實現(xiàn)分離,將類界面部分存放在頭文件(.h)中,將類實現(xiàn)放在程序文件(.cpp)中,而使用類的程序放在另一個程序文件中,這樣使整個程序更清晰。例如,聲明類C的類界面的部分用c.h文件保存,類實現(xiàn)部分用c.cpp文件保存,而使用類C的部分用a.cpp保存,如圖所示。類的組織形式通常將類界面與類實現(xiàn)分離,將類類的作用域聲明類時所使用的一對大括號({})形成了類作用域。在類作用域中聲明的標識符只在該類中具有可見性,并且其作用域與該標識符聲明的次序無關。類作用域包括了類中成員函數(shù)的作用域,即使該成員函數(shù)的實現(xiàn)放在類的外面也是如此。所以當成員函數(shù)的函數(shù)體中使用一個標識符時,編譯系統(tǒng)首先在成員函數(shù)中尋找其聲明,如果未找到則在該成員函數(shù)所在的類中尋找,如果還未找到,則在包含類作用域的更大作用域中作最后尋找。類的作用域聲明類時所使用的一對大括號({})形成了類的成員函數(shù)類的成員函數(shù)用于實現(xiàn)某種操作,成員函數(shù)的定義體可以在類的聲明體中,也可以在類的說明體外。在類聲明體中實現(xiàn)的函數(shù)是內聯(lián)函數(shù)。在類聲明體外實現(xiàn)的函數(shù)可以通過在函數(shù)聲明和定義上分別加上inline來表示該函數(shù)是內聯(lián)的,否則不是內聯(lián)函數(shù)。在類的聲明體內定義成員函數(shù)的優(yōu)點是使整個類集中于程序代碼的同一位置上,不利的方面是增加了類聲明的規(guī)模和復雜性,而且,內聯(lián)的函數(shù)代碼并不被相同類的對象所共享,因而增大了程序的內存開銷。類的成員函數(shù)類的成員函數(shù)用于實現(xiàn)某種操作,成員函數(shù)類的訪問權限在類聲明中,public、private和protected是關鍵字,稱為成員訪問限定符,它們分別表示公有、私有和保護的成員訪問權限。在C++中,有關類的訪問權限的其他規(guī)定如下:在默認的情況下,一個類中所有的成員都是私有的。一旦給出了成員訪問限定符(如public:),它后面的成員都具有這個成員訪問權限(如后面的成員均為公有的),直到出現(xiàn)另一個成員訪問限定符或類聲明結束為止。類的訪問權限在類聲明中,public、privat類與結構體類型的區(qū)別

從類的聲明格式可以看出,類與結構體類型是非常相似的。C++中類是由結構體類型演化而來的,但對結構體類型進行了擴展。類的成員可以是數(shù)據(jù)成員或成員函數(shù),結構體中的成員也可以是數(shù)據(jù)成員或函數(shù)成員。并且在結構體中,也可以使用關鍵詞public、private、protected限定其成員的訪問權限。

實際上,結構體只是類的一個特例。結構體與類惟一區(qū)別在于:在類中,其成員的默認訪問權限是私有的,而在結構體類型中,其成員的默認訪問權限是公有的。

當只需要描述數(shù)據(jù)結構時,使用結構體較好。當需要描述數(shù)據(jù)又需要描述對數(shù)據(jù)的處理方法時使用類為好。類與結構體類型的區(qū)別從類的聲明格式可以看出,類與結構類的特點類具有如下特點。(1)類具有封裝性(2)類具有安全性(3)類具有獨立性與可維護性(4)類具有繼承性(5)類具有多態(tài)性類的特點類具有如下特點。(1)類具有封裝性對象對象的定義格式對象的數(shù)據(jù)成員訪問方法對象的成員函數(shù)調用方法對象的存儲空間對象的賦值運算對象對象的定義格式對象的數(shù)據(jù)成員訪問方法對象的成員函數(shù)調用方對象的定義格式一旦聲明了一個類,就可以用它作為數(shù)據(jù)類型來定義類對象(簡稱為對象)。在C++中,類對象也稱為類變量或者類實例。定義類對象的格式如下:類名對象名表;其中,“類名”是待定的對象所屬的類的名字,即所定義的對象是該類的對象?!皩ο竺怼敝锌梢杂幸粋€或多個對象名,多個對象名之間用逗號分隔。在“對象名表”中,可以是一般的對象名,還可以是指向對象的指針變量名(即對象指針)、引用名(即對象引用)、對象數(shù)組名。對象的定義格式一旦聲明了一個類,就可以用它作為數(shù)對象的數(shù)據(jù)成員訪問方法對象的數(shù)據(jù)成員的訪問方式如下:對象名.數(shù)據(jù)成員名其中,“.”是一個運算符,該運算符的功能是表示對象的成員。對象的數(shù)據(jù)成員訪問方法對象的數(shù)據(jù)成員的訪問方式如下:對象名對象的成員函數(shù)調用方法成員函數(shù)的調用是為了響應發(fā)送對象的消息。消息對應于從一個對象向另一個對象或者從一個函數(shù)向一個對象發(fā)送的成員函數(shù)調用。調用對象的成員函數(shù)的方式如下:對象名.成員名(參數(shù)表)對象的成員函數(shù)調用方法成員函數(shù)的調用是為了響應發(fā)送對象的存儲空間實際上,C++只為每一個對象的數(shù)據(jù)成員分配內存空間,類中的所有成員函數(shù)只生成一個副本,而該類的每個對象執(zhí)行相同的函數(shù)成員副本。因此在描繪類圖時,通常將顯示類中所有的成員。然而在描繪類的對象圖時,將只顯示其數(shù)據(jù)成員。實際上,類對象也像變量一樣,可以定義全局對象或靜態(tài)對象等,它們的存儲空間類型和作用域與全局變量或靜態(tài)變量是一樣的。對象的存儲空間實際上,C++只為每一個對象的數(shù)據(jù)成對象的賦值運算在定義了一個類的多個對象時,可以在對象之間進行賦值運算,也稱為對象復制,假設定義了例2.1中類MyClass的兩個對象sa1和sa2,它們的值如圖所示。對象的賦值運算在定義了一個類的多個對象時,可以在對構造函數(shù)什么是構造函數(shù)調用構造函數(shù)重載構造函數(shù)復制構造函數(shù)構造函數(shù)什么是構造函數(shù)調用構造函數(shù)重載構造函數(shù)復制構造函數(shù)什么是構造函數(shù)C++提供了利用類的構造函數(shù)來初始化類的數(shù)據(jù)成員。構造函數(shù)具有如下性質:構造函數(shù)的名字與類的名字相同。構造函數(shù)盡管是一個函數(shù),但沒有任何類型,即它既不屬于返回值函數(shù)也不屬于void函數(shù)。類可以有多個構造函數(shù)。然而,一個類的所有構造函數(shù)的名字都相同。如果類有多個構造函數(shù),則它們的參數(shù)是各不相同的。當類對象創(chuàng)建時,構造函數(shù)會自動地執(zhí)行;由于它們沒有類型,不能像其他函數(shù)那樣進行調用。當類對象說明時調用哪一個構造函數(shù)取決于傳遞給它的參數(shù)類型。什么是構造函數(shù)C++提供了利用類的構造函數(shù)來初始化類的數(shù)據(jù)調用構造函數(shù)當定義類對象時,構造函數(shù)會自動執(zhí)行。因為一個類可能會有包括默認構造函數(shù)在內的不止一種構造函數(shù),下面討論如何調用特定的構造函數(shù)。1.調用默認構造函數(shù)假設一個類包含有默認構造函數(shù),調用默認構造函數(shù)的語法如下:類名類對象名;2.調用帶參數(shù)的構造函數(shù)假設一個類中包含有帶參數(shù)的構造函數(shù),調用這種帶參數(shù)的構造函數(shù)的語法如下:類名類對象名(參數(shù)表)其中,“參數(shù)表”中的參數(shù)可以是變量,也可以是表達式。3.調用內置數(shù)據(jù)類型的構造函數(shù)實際上,C++中內置的數(shù)據(jù)類型都可以看成是類,定義變量時除了可以使用“=”運算符賦初值外,還可以像定義類對象一樣調用其構造函數(shù)給變量賦初值。調用構造函數(shù)當定義類對象時,構造函數(shù)會自動執(zhí)行。因4.用new動態(tài)創(chuàng)建對象

可以用new運算符來動態(tài)地建立對象。用new運算符建立對象時,同樣也要自動調用構造函數(shù),以便完成對象數(shù)據(jù)成員的初始化。5.用構造函數(shù)初始化對象的過程

構造函數(shù)初始化對象的過程,實際上就是對構造函數(shù)的調用過程。一般情況下按如下步驟進行:(1)程序執(zhí)行到定義對象語句時,系統(tǒng)為對象分配內存空間。(2)系統(tǒng)自動調用構造函數(shù),將實參傳送給形參,執(zhí)行構造函數(shù)體時,將形參值賦給對象的數(shù)據(jù)成員。完成數(shù)據(jù)成員的初始化工作。4.用new動態(tài)創(chuàng)建對象可以用new運算符來動態(tài)地建立重載構造函數(shù)構造函數(shù)可以像普通函數(shù)一樣被重載,C++根據(jù)聲明中的參數(shù)個數(shù)和類型選擇合適的構造函數(shù)。重載構造函數(shù)構造函數(shù)可以像普通函數(shù)一樣被重載,C+復制構造函數(shù)復制構造函數(shù)常用于將一個已知對象的數(shù)據(jù)成員復制給正在創(chuàng)建的另一個同類的對象。除此之外,復制構造函數(shù)可以像其他構造函數(shù)一樣定義和使用。復制構造函數(shù)的格式如下:類名::復制構造函數(shù)(類名&引用名)或:類名::復制構造函數(shù)(const類名&引用名)在以下3種情況下,復制構造函數(shù)都會自動被調用:當說明一個類的對象時,使用另外一個對象來初始化(此時復制構造函數(shù)就如同其他構造函數(shù)一樣使用)。當一個函數(shù)返回值為類類型時。當一個類類型的實參傳遞給函數(shù)中的傳值調用參數(shù)時,在這種情況下,復制構造函數(shù)決定了參數(shù)按照什么方式傳遞。復制構造函數(shù)復制構造函數(shù)常用于將一個已知對象的數(shù)據(jù)析構函數(shù)什么是析構函數(shù)析構函數(shù)的性質析構函數(shù)的調用析構函數(shù)什么是析構函數(shù)析構函數(shù)的性質析構函數(shù)的調用什么是析構函數(shù)同構造函數(shù)一樣,析構函數(shù)也是類的特殊成員函數(shù),不用調用便自動執(zhí)行,而且析構函數(shù)的名字也與類的名字有關。C++程序設計的一個原則是:由系統(tǒng)自動分配的內存空間由系統(tǒng)自動釋放。什么是析構函數(shù)同構造函數(shù)一樣,析構函數(shù)也是類的特殊析構函數(shù)的性質析構函數(shù)具有如下性質:析構函數(shù)在類對象銷毀時自動執(zhí)行。一個類只能有一個析構函數(shù),而且析構函數(shù)沒有參數(shù)。析構函數(shù)的名字是“~”加上類的名字(中間沒有空格)。與構造函數(shù)一樣,析構函數(shù)也沒有任何類型,即不屬于返回值函數(shù)也不屬于void函數(shù)。它們不能像其他函數(shù)那樣被調用。析構函數(shù)的性質析構函數(shù)具有如下性質:析構函數(shù)在類對象銷析構函數(shù)的調用析構函數(shù)被系統(tǒng)自動調用時分為以下兩種情況。1.用類直接建立對象

在程序執(zhí)行過程中,當遇到對象的生存期結束時,系統(tǒng)自動調用析構函數(shù),然后回收為對象所分配的存儲空間。2.用new動態(tài)創(chuàng)建對象

對于用new運算符動態(tài)創(chuàng)建的對象,在產(chǎn)生對象時調用構造函數(shù),只有用delete釋放對象時,才調用析構函數(shù)。若不使用delete運算符來撤銷動態(tài)生成的對象,程序結束時對象仍存在,并占用相應的存儲空間,即系統(tǒng)不能自動撤銷動態(tài)創(chuàng)建的對象。析構函數(shù)的調用析構函數(shù)被系統(tǒng)自動調用時分為以下兩種情況。1一個對象的生存期如同一個變量一樣,對象從被創(chuàng)建到被釋放為止的時間稱為對象的生存期。一個對象的生存期如圖所示。一個對象的生存期如同一個變量一樣,對象從被創(chuàng)建到被釋對象淺復制與深復制對象淺復制對象深復制對象淺復制與深復制對象淺復制對象深復制對象淺復制當兩個對象之間進行復制時,若復制完成后,它們還共享某些資源(內存空間),其中一個對象的銷毀會影響另一個對象,這種對象之間的復制稱為對象淺復制。對象淺復制當兩個對象之間進行復制時,若復制完成后,對象深復制當兩個對象之間進行復制時,若復制完成后,它們不會共享任何資源(內存空間),其中一個對象的銷毀不會影響另一個對象,這種對象之間的復制稱為對象深復制。對象深復制當兩個對象之間進行復制時,若復制完成后,靜態(tài)成員靜態(tài)數(shù)據(jù)成員靜態(tài)成員函數(shù)靜態(tài)成員靜態(tài)數(shù)據(jù)成員靜態(tài)成員函數(shù)靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員是類中所有對象共享的成員,而不是某個對象的成員,也就是說靜態(tài)數(shù)據(jù)成員的存儲空間不是放在每個對象中,而是和成員函數(shù)一樣放在類公共區(qū)中。所以有時將靜態(tài)數(shù)據(jù)成員稱為類變量。因為靜態(tài)數(shù)據(jù)成員不從屬于任何一個具體對象,所以必須對它初始化,而且對它的初始化不能在構造函數(shù)中進行。靜態(tài)數(shù)據(jù)成員的使用方法如下:(1)靜態(tài)數(shù)據(jù)成員的定義與一般數(shù)據(jù)成員相似,但前面要加上static關鍵詞。當數(shù)據(jù)成員的一個副本就已經(jīng)足夠時,可使用static數(shù)據(jù)成員來節(jié)省存儲空間。(2)靜態(tài)數(shù)據(jù)成員的初始化與一般數(shù)據(jù)成員不同,靜態(tài)數(shù)據(jù)成員初始化的格式如下:類型類名::靜態(tài)數(shù)據(jù)成員=值;(3)在引用靜態(tài)數(shù)據(jù)成員時采用格式類名::靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員是類中所有對象共享的成員,靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)與靜態(tài)數(shù)據(jù)成員類似,也是從屬于類,都是類的靜態(tài)成員。只要類存在,靜態(tài)成員函數(shù)就可以使用,靜態(tài)成員函數(shù)的定義是在一般函數(shù)定義前加上static關鍵字。調用靜態(tài)成員函數(shù)的格式如下:類名::靜態(tài)成員函數(shù)名(參數(shù)表);靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)與靜態(tài)數(shù)據(jù)成員類似,也是從類成員指針類數(shù)據(jù)成員指針類成員函數(shù)指針類成員指針類數(shù)據(jù)成員指針類成員函數(shù)指針類數(shù)據(jù)成員指針類數(shù)據(jù)成員指針的定義格式如下:類型類名::*指針名由于類不是在運行時存在的對象,因此在使用類數(shù)據(jù)成員指針時,需要首先指定類的一個數(shù)據(jù)成員,然后通過類的對象來引用指針所指向的成員。類數(shù)據(jù)成員指針類數(shù)據(jù)成員指針的定義格式如下:類型類名::類成員函數(shù)指針指向類成員函數(shù)指針的定義格式如下:類型(類名::*指針名)(參數(shù)表)給類成員函數(shù)指針賦值的格式如下:指向函數(shù)的指針名=函數(shù)名程序中使用指向函數(shù)的指針調用函數(shù)的格式如下:(*指向函數(shù)的指針名)(實參表)類成員函數(shù)指針指向類成員函數(shù)指針的定義格式如下:應用實例編寫一個程序,設計一個滿足如下要求的CDate類,用數(shù)據(jù)進行調試并輸出結果:(1)用日/月/年格式輸出日期。(2)可進行日期加一天的操作。(3)設置日期。應用實例編寫一個程序,設計一個滿足如下要求的CDate類,用練習題2給出以下程序的執(zhí)行結果。#include<iostream.h>classSample{intx,y;public:Sample(){x=y=0;}Sample(inta,intb) {x=a;y=b;}~Sample(){if(x==y)cout<<"x=y"<<endl;elsecout<<"x!=y"<<endl;}voiddisp(){cout<<"x="<<x<<",y="<<y<<endl;}};voidmain(){Samples1(2,3);s1.disp();}練習題2給出以下程序的執(zhí)行結果。#include<iost上機實驗題2設計一個詞典類Dic,其中包含若干單詞信息,每個單詞由英文單詞及對應的中文含義組成。并含有單詞增加和英漢翻譯成員函數(shù),通過查詞典的方式將一段英語翻譯成對應的漢語。上機實驗題2設計一個詞典類Dic,其中包含若第2章類和對象(一)類對象構造函數(shù)析構函數(shù)一個對象的生存期對象淺復制與深復制靜態(tài)成員類成員指針應用實例練習題2上機實驗題2第2章類和對象(一)類對象構造函數(shù)析構函數(shù)一個對象的生存類類的聲明類的組織形式類的作用域類的成員函數(shù)類的訪問權限類與結構體類型的區(qū)別類的特點類類的聲明類的組織形式類的作用域類的成員函數(shù)類的訪問權限類與類的聲明類是一種用戶自定義的數(shù)據(jù)類型,聲明類的一般格式如下:class類名{private:

私有數(shù)據(jù)成員和成員函數(shù);protected:

保護數(shù)據(jù)成員和成員函數(shù);public:

公有數(shù)據(jù)成員和成員函數(shù);};各個成員函數(shù)的實現(xiàn);類界面類實現(xiàn)在聲明類時有如下規(guī)則:如果類的成員是變量,可以像聲明變量一樣聲明它。如果類的成員是函數(shù),一般是使用函數(shù)原型來聲明它。如果類的成員是函數(shù),它可以訪問類中的任何成員——數(shù)據(jù)成員和成員函數(shù)。也就是說,當聲明類的成員函數(shù)時,定義的函數(shù)可以直接訪問該類中任何成員而無需將其聲明為參數(shù),惟一的限制條件是在使用一個成員之前必須聲明它。類的聲明類是一種用戶自定義的數(shù)據(jù)類型,聲明類的一般格式如下類的組織形式通常將類界面與類實現(xiàn)分離,將類界面部分存放在頭文件(.h)中,將類實現(xiàn)放在程序文件(.cpp)中,而使用類的程序放在另一個程序文件中,這樣使整個程序更清晰。例如,聲明類C的類界面的部分用c.h文件保存,類實現(xiàn)部分用c.cpp文件保存,而使用類C的部分用a.cpp保存,如圖所示。類的組織形式通常將類界面與類實現(xiàn)分離,將類類的作用域聲明類時所使用的一對大括號({})形成了類作用域。在類作用域中聲明的標識符只在該類中具有可見性,并且其作用域與該標識符聲明的次序無關。類作用域包括了類中成員函數(shù)的作用域,即使該成員函數(shù)的實現(xiàn)放在類的外面也是如此。所以當成員函數(shù)的函數(shù)體中使用一個標識符時,編譯系統(tǒng)首先在成員函數(shù)中尋找其聲明,如果未找到則在該成員函數(shù)所在的類中尋找,如果還未找到,則在包含類作用域的更大作用域中作最后尋找。類的作用域聲明類時所使用的一對大括號({})形成了類的成員函數(shù)類的成員函數(shù)用于實現(xiàn)某種操作,成員函數(shù)的定義體可以在類的聲明體中,也可以在類的說明體外。在類聲明體中實現(xiàn)的函數(shù)是內聯(lián)函數(shù)。在類聲明體外實現(xiàn)的函數(shù)可以通過在函數(shù)聲明和定義上分別加上inline來表示該函數(shù)是內聯(lián)的,否則不是內聯(lián)函數(shù)。在類的聲明體內定義成員函數(shù)的優(yōu)點是使整個類集中于程序代碼的同一位置上,不利的方面是增加了類聲明的規(guī)模和復雜性,而且,內聯(lián)的函數(shù)代碼并不被相同類的對象所共享,因而增大了程序的內存開銷。類的成員函數(shù)類的成員函數(shù)用于實現(xiàn)某種操作,成員函數(shù)類的訪問權限在類聲明中,public、private和protected是關鍵字,稱為成員訪問限定符,它們分別表示公有、私有和保護的成員訪問權限。在C++中,有關類的訪問權限的其他規(guī)定如下:在默認的情況下,一個類中所有的成員都是私有的。一旦給出了成員訪問限定符(如public:),它后面的成員都具有這個成員訪問權限(如后面的成員均為公有的),直到出現(xiàn)另一個成員訪問限定符或類聲明結束為止。類的訪問權限在類聲明中,public、privat類與結構體類型的區(qū)別

從類的聲明格式可以看出,類與結構體類型是非常相似的。C++中類是由結構體類型演化而來的,但對結構體類型進行了擴展。類的成員可以是數(shù)據(jù)成員或成員函數(shù),結構體中的成員也可以是數(shù)據(jù)成員或函數(shù)成員。并且在結構體中,也可以使用關鍵詞public、private、protected限定其成員的訪問權限。

實際上,結構體只是類的一個特例。結構體與類惟一區(qū)別在于:在類中,其成員的默認訪問權限是私有的,而在結構體類型中,其成員的默認訪問權限是公有的。

當只需要描述數(shù)據(jù)結構時,使用結構體較好。當需要描述數(shù)據(jù)又需要描述對數(shù)據(jù)的處理方法時使用類為好。類與結構體類型的區(qū)別從類的聲明格式可以看出,類與結構類的特點類具有如下特點。(1)類具有封裝性(2)類具有安全性(3)類具有獨立性與可維護性(4)類具有繼承性(5)類具有多態(tài)性類的特點類具有如下特點。(1)類具有封裝性對象對象的定義格式對象的數(shù)據(jù)成員訪問方法對象的成員函數(shù)調用方法對象的存儲空間對象的賦值運算對象對象的定義格式對象的數(shù)據(jù)成員訪問方法對象的成員函數(shù)調用方對象的定義格式一旦聲明了一個類,就可以用它作為數(shù)據(jù)類型來定義類對象(簡稱為對象)。在C++中,類對象也稱為類變量或者類實例。定義類對象的格式如下:類名對象名表;其中,“類名”是待定的對象所屬的類的名字,即所定義的對象是該類的對象。“對象名表”中可以有一個或多個對象名,多個對象名之間用逗號分隔。在“對象名表”中,可以是一般的對象名,還可以是指向對象的指針變量名(即對象指針)、引用名(即對象引用)、對象數(shù)組名。對象的定義格式一旦聲明了一個類,就可以用它作為數(shù)對象的數(shù)據(jù)成員訪問方法對象的數(shù)據(jù)成員的訪問方式如下:對象名.數(shù)據(jù)成員名其中,“.”是一個運算符,該運算符的功能是表示對象的成員。對象的數(shù)據(jù)成員訪問方法對象的數(shù)據(jù)成員的訪問方式如下:對象名對象的成員函數(shù)調用方法成員函數(shù)的調用是為了響應發(fā)送對象的消息。消息對應于從一個對象向另一個對象或者從一個函數(shù)向一個對象發(fā)送的成員函數(shù)調用。調用對象的成員函數(shù)的方式如下:對象名.成員名(參數(shù)表)對象的成員函數(shù)調用方法成員函數(shù)的調用是為了響應發(fā)送對象的存儲空間實際上,C++只為每一個對象的數(shù)據(jù)成員分配內存空間,類中的所有成員函數(shù)只生成一個副本,而該類的每個對象執(zhí)行相同的函數(shù)成員副本。因此在描繪類圖時,通常將顯示類中所有的成員。然而在描繪類的對象圖時,將只顯示其數(shù)據(jù)成員。實際上,類對象也像變量一樣,可以定義全局對象或靜態(tài)對象等,它們的存儲空間類型和作用域與全局變量或靜態(tài)變量是一樣的。對象的存儲空間實際上,C++只為每一個對象的數(shù)據(jù)成對象的賦值運算在定義了一個類的多個對象時,可以在對象之間進行賦值運算,也稱為對象復制,假設定義了例2.1中類MyClass的兩個對象sa1和sa2,它們的值如圖所示。對象的賦值運算在定義了一個類的多個對象時,可以在對構造函數(shù)什么是構造函數(shù)調用構造函數(shù)重載構造函數(shù)復制構造函數(shù)構造函數(shù)什么是構造函數(shù)調用構造函數(shù)重載構造函數(shù)復制構造函數(shù)什么是構造函數(shù)C++提供了利用類的構造函數(shù)來初始化類的數(shù)據(jù)成員。構造函數(shù)具有如下性質:構造函數(shù)的名字與類的名字相同。構造函數(shù)盡管是一個函數(shù),但沒有任何類型,即它既不屬于返回值函數(shù)也不屬于void函數(shù)。類可以有多個構造函數(shù)。然而,一個類的所有構造函數(shù)的名字都相同。如果類有多個構造函數(shù),則它們的參數(shù)是各不相同的。當類對象創(chuàng)建時,構造函數(shù)會自動地執(zhí)行;由于它們沒有類型,不能像其他函數(shù)那樣進行調用。當類對象說明時調用哪一個構造函數(shù)取決于傳遞給它的參數(shù)類型。什么是構造函數(shù)C++提供了利用類的構造函數(shù)來初始化類的數(shù)據(jù)調用構造函數(shù)當定義類對象時,構造函數(shù)會自動執(zhí)行。因為一個類可能會有包括默認構造函數(shù)在內的不止一種構造函數(shù),下面討論如何調用特定的構造函數(shù)。1.調用默認構造函數(shù)假設一個類包含有默認構造函數(shù),調用默認構造函數(shù)的語法如下:類名類對象名;2.調用帶參數(shù)的構造函數(shù)假設一個類中包含有帶參數(shù)的構造函數(shù),調用這種帶參數(shù)的構造函數(shù)的語法如下:類名類對象名(參數(shù)表)其中,“參數(shù)表”中的參數(shù)可以是變量,也可以是表達式。3.調用內置數(shù)據(jù)類型的構造函數(shù)實際上,C++中內置的數(shù)據(jù)類型都可以看成是類,定義變量時除了可以使用“=”運算符賦初值外,還可以像定義類對象一樣調用其構造函數(shù)給變量賦初值。調用構造函數(shù)當定義類對象時,構造函數(shù)會自動執(zhí)行。因4.用new動態(tài)創(chuàng)建對象

可以用new運算符來動態(tài)地建立對象。用new運算符建立對象時,同樣也要自動調用構造函數(shù),以便完成對象數(shù)據(jù)成員的初始化。5.用構造函數(shù)初始化對象的過程

構造函數(shù)初始化對象的過程,實際上就是對構造函數(shù)的調用過程。一般情況下按如下步驟進行:(1)程序執(zhí)行到定義對象語句時,系統(tǒng)為對象分配內存空間。(2)系統(tǒng)自動調用構造函數(shù),將實參傳送給形參,執(zhí)行構造函數(shù)體時,將形參值賦給對象的數(shù)據(jù)成員。完成數(shù)據(jù)成員的初始化工作。4.用new動態(tài)創(chuàng)建對象可以用new運算符來動態(tài)地建立重載構造函數(shù)構造函數(shù)可以像普通函數(shù)一樣被重載,C++根據(jù)聲明中的參數(shù)個數(shù)和類型選擇合適的構造函數(shù)。重載構造函數(shù)構造函數(shù)可以像普通函數(shù)一樣被重載,C+復制構造函數(shù)復制構造函數(shù)常用于將一個已知對象的數(shù)據(jù)成員復制給正在創(chuàng)建的另一個同類的對象。除此之外,復制構造函數(shù)可以像其他構造函數(shù)一樣定義和使用。復制構造函數(shù)的格式如下:類名::復制構造函數(shù)(類名&引用名)或:類名::復制構造函數(shù)(const類名&引用名)在以下3種情況下,復制構造函數(shù)都會自動被調用:當說明一個類的對象時,使用另外一個對象來初始化(此時復制構造函數(shù)就如同其他構造函數(shù)一樣使用)。當一個函數(shù)返回值為類類型時。當一個類類型的實參傳遞給函數(shù)中的傳值調用參數(shù)時,在這種情況下,復制構造函數(shù)決定了參數(shù)按照什么方式傳遞。復制構造函數(shù)復制構造函數(shù)常用于將一個已知對象的數(shù)據(jù)析構函數(shù)什么是析構函數(shù)析構函數(shù)的性質析構函數(shù)的調用析構函數(shù)什么是析構函數(shù)析構函數(shù)的性質析構函數(shù)的調用什么是析構函數(shù)同構造函數(shù)一樣,析構函數(shù)也是類的特殊成員函數(shù),不用調用便自動執(zhí)行,而且析構函數(shù)的名字也與類的名字有關。C++程序設計的一個原則是:由系統(tǒng)自動分配的內存空間由系統(tǒng)自動釋放。什么是析構函數(shù)同構造函數(shù)一樣,析構函數(shù)也是類的特殊析構函數(shù)的性質析構函數(shù)具有如下性質:析構函數(shù)在類對象銷毀時自動執(zhí)行。一個類只能有一個析構函數(shù),而且析構函數(shù)沒有參數(shù)。析構函數(shù)的名字是“~”加上類的名字(中間沒有空格)。與構造函數(shù)一樣,析構函數(shù)也沒有任何類型,即不屬于返回值函數(shù)也不屬于void函數(shù)。它們不能像其他函數(shù)那樣被調用。析構函數(shù)的性質析構函數(shù)具有如下性質:析構函數(shù)在類對象銷析構函數(shù)的調用析構函數(shù)被系統(tǒng)自動調用時分為以下兩種情況。1.用類直接建立對象

在程序執(zhí)行過程中,當遇到對象的生存期結束時,系統(tǒng)自動調用析構函數(shù),然后回收為對象所分配的存儲空間。2.用new動態(tài)創(chuàng)建對象

對于用new運算符動態(tài)創(chuàng)建的對象,在產(chǎn)生對象時調用構造函數(shù),只有用delete釋放對象時,才調用析構函數(shù)。若不使用delete運算符來撤銷動態(tài)生成的對象,程序結束時對象仍存在,并占用相應的存儲空間,即系統(tǒng)不能自動撤銷動態(tài)創(chuàng)建的對象。析構函數(shù)的調用析構函數(shù)被系統(tǒng)自動調用時分為以下兩種情況。1一個對象的生存期如同一個變量一樣,對象從被創(chuàng)建到被釋放為止的時間稱為對象的生存期。一個對象的生存期如圖所示。一個對象的生存期如同一個變量一樣,對象從被創(chuàng)建到被釋對象淺復制與深復制對象淺復制對象深復制對象淺復制與深復制對象淺復制對象深復制對象淺復制當兩個對象之間進行復制時,若復制完成后,它們還共享某些資源(內存空間),其中一個對象的銷毀會影響另一個對象,這種對象之間的復制稱為對象淺復制。對象淺復制當兩個對象之間進行復制時,若復制完成后,對象深復制當兩個對象之間進行復制時,若復制完成后,它們不會共享任何資源(內存空間),其中一個對象的銷毀不會影響另一個對象,這種對象之間的復制稱為對象深復制。對象深復制當兩個對象之間進行復制時,若復制完成后,靜態(tài)成員靜態(tài)數(shù)據(jù)成員靜態(tài)成員函數(shù)靜態(tài)成員靜態(tài)數(shù)據(jù)成員靜態(tài)成員函數(shù)靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員是類中所有對象共享的成員,而不是某個對象的成員,也就是說靜態(tài)數(shù)據(jù)成員的存儲空間不是放在每個對象中,而是和成員函數(shù)一樣放在類公共區(qū)中。所以有時將靜態(tài)數(shù)據(jù)成員稱為類變量。因為靜態(tài)數(shù)據(jù)成員不從屬于任何一個具體對象,所以必須對它初始化,而且對它的初始化不能在構造函數(shù)中進行。靜態(tài)數(shù)據(jù)成員的使用方法如下:(1)靜態(tài)數(shù)據(jù)成員的定義與

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論