C C 學習之路(一)

2021-09-22 16:52:46 字數 1833 閱讀 2373

今天我想要寫的是關於呼叫建構函式的問題。

那麼,先來看一道題:

當我第一次看到這一道題的時候,我第一反應的答案是:9。然後看了一下答案,發現答案是4。於是乎我再一次翻看了建構函式的定義,才恍然大悟自己先前的想法是不對的。

要想解決上面的問題,我們先要弄懂以下兩個問題:

一、 建構函式是幹什麼的

class counter

private:    

// 資料成員

int m_value;

}該類物件被建立時,編譯系統物件分配記憶體空間,並自動呼叫該建構函式->由建構函式完成成員的初始化工作

eg:    counter c1;

編譯系統為物件c1的每個資料成員(m_value)分配記憶體空間,並呼叫建構函式counter( )自動地初始化物件c1的m_value值設定為0

故:建構函式的作用:初始化物件的資料成員。

二、 建構函式的種類

class complex

//    一般建構函式(也稱過載建構函式)

// 一般建構函式可以有各種引數形式,乙個類可以有多個一般建構函式,前提是引數的個數或者型別不同(基於c++的過載函式原理)

// 例如:你還可以寫乙個 complex( int num)的建構函式出來

// 建立物件時根據傳入的引數不同呼叫不同的建構函式

complex(double real, double imag)

//    複製建構函式(也稱為拷貝建構函式)

//    複製構造函式引數為類物件本身的引用,用於根據乙個已存在的物件複製出乙個新的該類的物件,一般在函式中會將已存在物件的資料成員的值複製乙份到新建立的物件中

//    若沒有顯示的寫複製建構函式,則系統會預設建立乙個複製建構函式,但當類中有指標成員時,由系統預設建立該複製建構函式會存在風險,具體原因請查詢 有關 「淺拷貝」 、「深拷貝」的文章論述

complex(const complex & c)

// 型別轉換建構函式,根據乙個指定的型別的物件建立乙個本類的物件

// 例如:下面將根據乙個double型別的物件建立了乙個complex物件

complex::complex(double r)

// 等號運算子過載

// 注意,這個類似複製建構函式,將=右邊的本類物件的值複製給等號左邊的物件,它不屬於建構函式,等號左右兩邊的物件必須已經被建立

// 若沒有顯示的寫=運算子過載,則系統也會建立乙個預設的=運算子過載,只做一些基本的拷貝工作

complex &operator=( const complex &rhs )

// 複製等號右邊的成員到左邊的物件中

this->m_real = rhs.m_real;

this->m_imag = rhs.m_imag;

// 把等號左邊的物件再次傳出

// 目的是為了支援連等 eg:    a=b=c 系統首先執行 b=c

// 然後執行 a= ( b=c的返回值,這裡應該是複製c值後的b物件)    

return *this;}}

下面使用上面定義的類物件來說明各個建構函式的用法:

void main()

當你理解了以上的內容是再看上面我出的題,就知道答案原來是這樣來的:

a[4]是類陣列,有4個物件,呼叫建構函式4次

,而*p[5]是指標陣列,也就是5個元素存放的是指向myclass型別的物件的指標,沒有初始化的指標為空,不指向任何物件,也不呼叫建構函式。

如果你懂了,我們再來看一道題:

C C 學習之路

c c 學習之路 www.firnow.com 有人說c語言已經過時了,學程式設計應該從物件導向語言開始。在這一點上我持保留意見。1 關於c語言的學習 在linux下,大部分的程式還是c語言實現的。win32 api仍然是用c語言實現的。windows平台c 應用廣泛是微軟力推的結果,但是現在win...

c c 高階之路

c c 從入門到高手所有必備pdf書籍收藏,喜歡的朋友支援下吧 c c和指標 pdf高畫質版 c程式語言 完美中文版pdf the c programming language 英文原版 c的缺陷與陷阱 pdf高畫質版 你必須知道的495個c語言問題 完美pdf c專家程式設計 高畫質版pdf 中英...

學習opencv之路一

vs2013下安裝opencv2.4.9 第一次發表部落格,這是我開始學習opencv的標誌,由於重灌系統,裝了一天的程式。由於要開始學習opencv,所以首先裝的就是vs2013和opencv,好切入正題。具體操作請參考vs2013下安裝opencv2.4.8 為了大家的方便,我貼出opencv2...