建構函式的作用:在物件被建立時使用特定的值構造物件,將物件初始化為乙個特定的初始狀態。
例如:希望在構造乙個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 之類與物件
類就是一類具有共同特徵的群體 物件是這類群體的某乙個具體的個體 上面的描述很迷,接下來我們通過乙個遊戲的例子來解釋一下什麼是類,什麼是物件。你現在玩王者榮耀轉殖模式,假設十個亞瑟在對線,亞瑟這個英雄就可以說是乙個類,而你操作的那個亞瑟是獨一無二的,是乙個具體的物件。每乙個類都有他的屬性和方法,我們可...