<form id="dn777"><listing id="dn777"></listing></form>

        <form id="dn777"></form>

        <address id="dn777"></address>

        二級公共基礎知識考點分析 下載本文

        3.拷貝構造函數

        類中有一種特殊的構造函數叫做拷貝構造函數,它用一個已知的對象初始化一個正在創建的同類對象。拷貝構造函數的一般格式如下:

        <類名>::<類名>(const<類名>&<引用對象名>) {

        //拷貝構造函數體 }

        拷貝構造函數具有以下特點:

        (1)也是一種構造函數,因此函數名與類名相同,并且不能指定函數返順類型。 (2)只有一個參數,是對同類的某個對象的引用。

        (3)每一個類中都必須有一個拷貝構造函數。如果類中沒有聲明拷貝構造函數,編譯器會自動生成一個具有上述形式的公有的拷貝構造函數。

        6.4 對象的生存期

        1.全局對象、靜態對象與局部對象

        對象的生存期是指對象從被創建開始到被釋放為止的時間。對象按生存期可分為3類: (1)局部對象:當程序執行到局部對象的定義之處時,調用構造函數創建該對象;當程序退出定義該對象所在的函數體或程序塊時,調用析構函數釋放該對象。

        (2)靜態對象:當程序第一次執行到靜態對象的定義之處時,調用構造函數創建該對象;當程序結束時調用析構函數釋放該對象。

        (3)全局對象:當程序開始執行時,調用構造函數創建該對象;當程序結束時調用析構函數釋放該對象。 2.自由存儲對象

        動態內存分配技術可以保證在程序運行過程中按照實際需要申請適量的內存,使用結束后進行釋放。這種在程序運行過程中根據需要可以隨時建立或刪除的對象稱為自由存儲對象。建立和刪除工作分別由堆運算符new和delete完成。

        6.5 this 指針

        C++提供了一個特殊的對象指針——this指針,它是成員函數所屬對象的指針,它指向類對象的地址。成員函數通過這個指針可以知道自己屬于哪一個對象。

        this指針是一個隱含的指針,它隱含于每個類的非靜態成員函數中,它明確地表示出了成員函數當前操作的數據所屬的對象。當對一個對象調用成員函數時,編譯程序先將對象的地址賦值給this指針,然后調用成員函數,每次成員函數存取數據成員時,則隱含使用this指針。

        6.6 靜態成員

        對于類中的非靜態數據成員,每一個類對象都擁有一個拷貝(副本),即每個對象的同名數據成員可以分別存儲不同的數值,這是保證每個對象擁有區別于其他對象的特征的需要。而類中的靜態成員則是解決同一個類的不同對象之間的數據和函數共享問題的。靜態成員的特性是不管這個類創建了多少個對象,它的靜態成員都只有一個拷貝(副本),這個副本被所有屬于這個類的對象共享。這種共享與全局變量或全局函數相比,既沒有破壞數據隱藏的原則,又保證了安全性。

        靜態成員表示整個類范圍的信息,其聲明以static關鍵字開始,包括靜態數據成員和靜態成員函數。 1.靜態數據成員

        靜態數據成員聲明時要使用關鍵字static。

        靜態數據成員在每個類對象中并不占有存儲空間,它只是在每個類中分配有存儲空間,供所有對象公用。靜態數據成員的值對每個對象都是一樣的,但它的值可以被任何一個對象更新,從而實現了同一類的不同對象之間的數據共享。

        靜態數據成員具有靜態生存期,必須對它進行初始化。靜態數據成員初始化的一般格式如下:

        <數據類型><類名>::<靜態數據成員名>=<初始值>; 在對靜態數據成員初始化時應注意:

        (1)由于在類的聲明中僅僅是對靜態數據成員進行了引用性聲明,因此必須在文件作用域的某個地方對靜態數據成員進行定義并初始化,即應在類體外對靜態數據成員進行初始化(靜態數據成員的初始化與它的訪問控制權限無關)。

        (2)靜態數據成員初始化時前面不加static關鍵字,以免與一般靜態變量或對象混淆。 (3)由于靜態數據成員是類的成員,因此在初始化時必須使用作用域運算符(::)限定它所屬的類。

        2.靜態成員函數

        公有的靜態數據成員可以直接訪問,但私有的或保護的靜態數據成員卻必須通過公有的接口進行訪問,一般將這個公有的接口定義為靜態成員函數。

        使用static關鍵字聲明的成員函數就是靜態成員函數,靜態成員函數也屬于整個類而不屬于類中的某個對象,它是該類的所有對象共享的成員函數。

        靜態成員函數可以在類體內定義,也可以在類外定義。當在類外定義時,要注意不能使用static關鍵字作為前綴。

        由于靜態成員函數在類中只有一個拷貝(副本),因此它訪問對象的成員時要受到一些限制:靜態成員函數可以直接訪問類中說明的靜態成員,但不能直接訪問類中說明的非靜態成員;若要訪問非靜態成員時,必須通過參數傳遞的方式得到相應的對象,再通過對象來訪問。

        6.7 常成員

        雖然數據隱藏保證了數據的安全性,但各種形式的數據共享卻又不同程度地破壞了數據的安全性。因此,對于既需要共享又需要防止改變的數據應該定義為常量進行保護,以保證它在整個程序運行期間是不可改變的。這些常量需要使用const修飾符進行定義。const關鍵字不僅可以修飾類對象本身,也可以修飾類對象的成員函數和數據成員,分別稱為常對象、常成員函數和常數據成員。 1.常對象

        使用const關鍵字修飾的對象稱為常對象,它的定義格式如下: <類名>const<對象名> 或

        const<類名><對象名>

        常對象在定義時必須進行初始化,而且不能被更新。 2.常成員函數

        使用const關鍵字說明的成員函數稱為常成員函數,常成員函數的說明格式如下: <返回類型><成員函數名>(<參數表>)const; 3.常數據成員

        使用const說明的數據成員稱為常數據成員。常數據成員的定義與一般常量的定義方式相同,只是它的定義必須出現在類體中。

        常數據成員同樣也必須進行初始化,并且不能被更新。但常數據成員的初始化只能通過構造函數的成員初始化列表進行。

        常數據成員的初始化只能在成員初始化列表中進行,但對于大多數數據成員而言,既可以使用成員初始化列表的方式,也可以使用賦值,即在構造函數體中使用賦值語句將表達式的值賦值給數據成員。這兩種方式中,成員初始化列表方式使初始化情況更加明顯,并且可能帶來效率上的優勢。

        6.8 友元

        類具有數據封裝和隱藏的特性,只有類的成員函數才能訪問類的私有成員,外部函數只能訪問類的公有成員。但在某些情況下,需要在類的外部訪問類的私有成員。這時,如果通過公有成員函數進行訪問,由于參數傳遞、類型檢查和安全性檢查等需要時間上的開銷,將影響程序的運行效率。為了解決整個問題,引入了友元。友元可以在類外部直接訪問類的私有成員,提高了程序的運行效率。

        友元提供了不同類或對象的成員函數之間、類的成員函數與一般函數之間進行數據共享的機制。對于一個類,可以利用friend關鍵字將一般函數、其他類的成員函數或者是其他





        动漫黄在线观看免费视频