C 學習之類與物件 二)

2021-09-12 02:31:33 字數 2414 閱讀 4080

建構函式的作用:在物件被建立時使用特定的值構造物件,將物件初始化為乙個特定的初始狀態。

例如:希望在構造乙個clock類物件時,將初始時間設為0:0:0,就可以通過建構函式來設定。

1、函式名與類名相同;

2、 不能定義返回值型別,也不能有return語句;

3、可以有形式引數,也可以沒有形式引數;

4、可以是內聯函式;可以過載;可以帶預設引數值。

在物件建立時被自動呼叫

例如:clock myclock(0, 0, 0);

呼叫時可以不需要實參的建構函式,即參數列為空的建構函式、全部引數都有預設值的建構函式。

下面兩個都是預設建構函式,如在類中同時出現,將產生編譯錯誤。

clock();

clock(int newh=0,int newm=0,int news=0);

1、如果程式中未定義建構函式,編譯器將在需要時自動生成乙個預設建構函式

引數列表為空,不為資料成員設定初始值;

如果類內定義了成員的初始值,則使用類內定義的初始值;

如果沒有定義類內的初始值,則以預設方式初始化;

基本型別的資料預設初始化的值是不確定的。

如果程式中已定義建構函式,預設情況下編譯器就不再隱含生成預設建構函式。如果此時依然希望編譯器隱含生成預設建構函式,可以使用「=default」。

例如:

class clock ;
建構函式例題:

//類定義

class clock;

//建構函式的實現

clock::clock(int newh,int newm,int news): hour(newh),minute(newm), second(news)

int main()

類中往往有多個建構函式,只是參數列初始化列表不同,其初始化演算法都是相同的,這時,為了避免**重複,可以使用委託建構函式。

來看上面的兩個建構函式:

clock(int newh, int newm, int news) : hour(newh),minute(newm),  second(news)   //建構函式

clock::clock(): hour(0),minute(0),second(0) //預設建構函式

委託建構函式使用類的其他建構函式執行初始化過程

例如:

clock(int newh, int newm, int news):  hour(newh),minute(newm),  second(news)

clock(): clock(0, 0, 0)

定義:複製建構函式是一種特殊的建構函式,其形參為本類的物件引用。作用是用乙個已存在的物件去初始化同型別的新物件

class 類名;

類名::類(const 類名 &物件名)//複製建構函式的實現

如果程式設計師沒有為類宣告拷貝初始化建構函式,則編譯器自己生成乙個隱含的複製建構函式。

這個建構函式執行的功能是:用作為初始值的物件的每個資料成員的值,初始化將要建立的物件的對應資料成員。

如果不希望物件被複製構造, c++98做法:將複製建構函式宣告為private,並且不提供函式的實現。c++11做法:用「=delete」指示編譯器不生成預設複製建構函式。

例如:

class point     //建構函式,內聯

point(const point& p) =delete; //指示編譯器不生成預設複製建構函式

private:

int x, y; //私有資料

};

定義乙個物件時,以本類另乙個物件作為初始值,發生複製構造;

如果函式的形參是類的物件,呼叫函式時,將使用實參物件初始化形參物件,發生複製構造;

如果函式的返回值是類的物件,函式執行完成返回主調函式時,將使用return語句中的物件初始化乙個臨時無名物件,傳遞給主調函式,此時發生複製構造。

這種情況也可以通過移動構造避免不必要的複製(之後學習)

完成物件被刪除前的一些清理工作。

在物件的生存期結束的時刻系統自動呼叫它,然後再釋放此物件所屬的空間。

如果程式中未宣告析構函式,編譯器將自動產生乙個預設的析構函式,其函式體為空。

建構函式和析構函式舉例

#include 

using namespace std;

class point ;

C 之類與物件

都說c 是乙個完全物件導向的語言,我 那天很自豪的也和我說了,好像這個語言很令人振奮。以前學習vb的時候總是感覺很吃力,因為自己對 基本根本沒有親和力,在以前如果給自己一大批 讓自己按著敲,那麼這個對於當時的我來說肯定是世界上最幸福的事情了。很喜歡安靜的敲 的感覺 現在越來越能體會到,是被人賦予靈魂...

C 之類與物件

類的定義語法 私有成員 公有成員 保護成員 物件 由類定義的例項,通過物件可以訪問類的公有成員,私有成員只能通過類內成員 友元函式 友元類訪問 建構函式 預設建構函式 一般建構函式 拷貝建構函式 採用引數常引用 類的組合 類的組合是 is a kind of 的關係,要特別注意類的組合函式的建構函式...

c 之類與物件

類就是一類具有共同特徵的群體 物件是這類群體的某乙個具體的個體 上面的描述很迷,接下來我們通過乙個遊戲的例子來解釋一下什麼是類,什麼是物件。你現在玩王者榮耀轉殖模式,假設十個亞瑟在對線,亞瑟這個英雄就可以說是乙個類,而你操作的那個亞瑟是獨一無二的,是乙個具體的物件。每乙個類都有他的屬性和方法,我們可...