0
1多繼承
多繼承即乙個子類可以有多個父類,它繼承了多個父類的特性。
c++ 類可以從多個類繼承成員,語法如下:
class
:1>1
>,2
>2
>,…{};
當上面的**被編譯和執行時,它會產生下列結果:
total
area:35
total
paint cost
:$2450
0
2建構函式
類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。
建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void,可以有0-n個形參。建構函式可用於為某些成員變數設定初始值。
建構函式具有以下特點:
*建構函式可以過載:只要每個建構函式形參表唯一,同乙個類中的建構函式數量不限:
*建構函式自動執行;
*建構函式可以包含乙個建構函式初始化列表:
*沒有預設建構函式的類型別的成員,以及 const 或引用型別的成員,必須在初始化列表中完成初始化。
初始化表示式:
sales_item(const std::string &book, int cnt, doubleprice): isbn(book), units_sold(cnt), revenue(cnt * price)
範例:class constref*不含形參的建構函式就是預設建構函式。注意:public:
constref(int ii);
private:
int i;
constint ci;
int &ri;
constref::constref(int ii)
i = ii; // ok
ci = ii; // error
ri = i; //
應該這麼初始化:
constref::constref(int ii): i(ii), ci(i), ri(ii)
只有當乙個類沒有定義建構函式時,編譯器才會自動生成乙個預設建構函式。
乙個類只要定義了乙個建構函式,編譯器也不會再生成預設建構函式。
03析構函式
析構函式是建構函式的互補:當物件超出作用域或動態分配的物件被刪除時,將自動應用析構函式。
析構函式可用於釋放構造物件時或在物件的生命期中所獲取的資源。
析構函式的名稱與類的名稱是完全相同的,只是在前面加了個波浪號(~)作為字首,它不會返回任何值,也不能帶有任何引數。析構函式有助於在跳出程式(比如關閉檔案、釋放記憶體等)前釋放資源。
當上面的**被編譯和執行時,它會產生下列結果:
object
isbeing created
length
of line :6
object
isbeing deleted
建構函式的用途之一是自動獲取資源;與之相對的是,析構函式的用途之一是**資源。除此之外,析構函式可以執行任意類設計者希望在該類物件的使用完畢之後執行的操作。(1) 何時呼叫析構函式(2)何時編寫顯式析構函式如果類需要定義析構函式,則它也需要定義賦值操作符和複製建構函式,這個規則常稱為三法則:如果類需要析構函式,則需要所有這三個複製控制成員。(3)合成析構函式
合成析構函式按物件建立時的逆序撤銷每個非 static 成員,因此,它按成員在類中宣告次序的逆序撤銷成員。
對於每個類型別的成員,合成析構函式呼叫該成員的析構函式來撤銷物件。
合成析構函式並不刪除指標成員所指向的物件。 所以,如果有指標成員,一定要定義自己的析構函式來刪除指標。
析構函式與複製建構函式或賦值操作符之間的乙個重要區別:即使我們編寫了自己的析構函式,合成析構函式仍然執行。
初始化C 類成員
問題 我的問題是關於初始化c 類成員的。我見過許多這樣的 包括在你的欄目中也見到過 csomeclass csomeclass x 0 y 1 而在別的什麼地方則寫成下面的樣子 csomeclass csomeclass x 0 y 1 我的一些程式設計師朋友說第二種方法比較好,但他們都不知道為什麼...
C 類成員的初始化
1 關於建構函式 1 用建構函式確保初始化 對於乙個空類 class empty 編譯器會自動宣告4個預設函式 建構函式,拷貝建構函式,賦值函式,析構函式 當然,如果不想使用自動生成的函式,就應該明確拒絕 這些生成的函式都是public且inline。建構函式對資料成員進行初始化,使用未初始化值可能...
C 類成員的初始化
分類 c c 進行時 2012 04 11 10 02 14697人閱讀收藏 舉報 c string initialization class 編譯器面試 1 關於建構函式 1 用建構函式確保初始化 對於乙個空類 cpp view plain copy class empty 編譯器會自動宣告4個預...