在c++程式中,可以將語義、功能相似的幾個函式用同乙個名字表示,即函式過載 。
c++規定建構函式與類同名,建構函式只能有乙個名字。如果想用幾種不同的方法建立物件該怎麼辦?別無選擇,只能用過載機制來實現。所以類可以有多個同名的建構函式。
幾個同名的過載函式仍然是不同的函式,它們是如何區分的呢?我們自然想到函式介面的兩個要素:引數與返回值。
只能靠引數而不能靠返回值型別的不同來區分過載函式。編譯器根據引數為每個過載函式產生不同的內部識別符號.
c++ 語言支援函式內聯,其目的是為了提高函式的執行效率(速度)。
c++ 語言的函式內聯機制既具備巨集**的效率,又增加了安全性,而且可以自由操作類的資料成員。所以在c++ 程式中,應該用內聯函式取代所有巨集**,「斷言assert」恐怕是唯一的例外。
而如下風格的函式foo則成為內聯函式:
void foo(int x, int y);
inline void foo(int x, int y) // inline與函式定義體放在一起
以下情況不宜使用內聯:
(1)如果函式體內的**比較長,使用內聯將導致記憶體消耗代價較高。
(2)如果函式體內出現迴圈,那麼執行函式體內**的時間要比函式呼叫的開銷大。
類的建構函式和析構函式容易讓人誤解成使用內聯更有效。要當心建構函式和析構函式可能會隱藏一些行為,如「偷偷地」執行了基類或成員物件的建構函式和析構函式。所以不要隨便地將建構函式和析構函式的定義體放在類宣告中。
c++ 語言中的過載、內聯、預設引數、隱式轉換等機制展現了很多優點,但是這些優點的背後都隱藏著一些隱患。正如人們的飲食,少食和暴食都不可取,應當恰到好處。我們要辨證地看待c++的新機制,應該恰如其分地使用它們。雖然這會使我們程式設計時多費一些心思,少了一些痛快,但這才是程式設計的藝術。
C 建構函式與普通成員函式,建構函式過載
建構函式是類的成員函式,用於初始化類的物件。在c 中,建立物件 類的例項 時會自動呼叫建構函式。它是類的特殊成員函式。在以下方面有所不同 建構函式與類本身具有相同的名稱 建構函式沒有返回型別 建立物件時會自動呼叫建構函式 如果我們未指定建構函式,則c 會自動生成乙個預設建構函式 不帶引數,並且是空主...
C 過載建構函式
1.過載建構函式 建構函式也具備了過載的特性。include using namespace std class rectangle rectangle int l,int w 大括號中就是函式索要執行的功能。const成員或者引用成員都是不可賦值的,因此只能進行初始化。include using ...
C 建構函式的過載
剛看了一段 是關於建構函式的過載!其實以前學校c 的時候已經學過。但是現在再看c 的時候,雖然是一樣的,但是還是有很多沒明白。比如下面的乙個問題還是經過除錯後,才發現的。雖然問題不大,不過如果用手寫的話,就會造成嚴重的錯誤!using system using system.collections....