建構函式的使用

2021-08-02 05:44:46 字數 746 閱讀 4733

在c++中,我們一般會利用建構函式來初始化類裡面的成員函式,先看下面一段**,可以自己先考慮輸出語句會不會是0?

#include using namespace  std;

struct cls

cls() };

int main()

{ cls obj ;

cout<

在**第10行,不帶引數的建構函式直接呼叫了帶引數的建構函式。這種呼叫往往被很多人誤解,以為可以通過建構函式的過載和相互呼叫實現一些類似預設引數的功能,其實是不行的,而且往往會有***。下面加幾條列印物件位址的語句到原來的程式中:

#include using namespace  std;

struct cls

{ int m_i ;

cls(int i) : m_i(i)

{ cout<

程式執行結果如下:

可以看到,在帶引數的建構函式裡列印出來的抵制物件和物件obj的位址不一致。實際上,**13行的呼叫只是在棧上生成了乙個臨時物件,對於自己本身毫無影響。還可以發現,建構函式的互相呼叫引起的後果不是死迴圈,而是棧溢位。

因此一開始的**輸出不為0,是個隨機數,原因是建構函式內呼叫建構函式只是在站上生成了乙個臨時物件,對於自己本身毫無影響。

建構函式的使用

個人理解的建構函式的使用 function person name,height var person person xiaoli 180 var person1 person xiaohei 170 列印出來的結果是 person object person1 object 個人理解 functi...

建構函式使用

建構函式具有兩個特點,第一首字母大寫,第二內部使用this關鍵字,呼叫時必須通過new命令呼叫生成例項。new的作用 呼叫建構函式生成乙個例項物件,有點類似於工廠模式,每個例項擁有建構函式的方法與屬性。使用new時可以不加 new foo 不過閱讀方便這裡推薦加上,建構函式可以接受引數,與普通函式一...

靜態建構函式的使用

1 用於對靜態字段 唯讀欄位等的初始化。2 新增static關鍵字,不能新增訪問修飾符,因為靜態建構函式都是私有的。3 類的靜態建構函式在給定應用程式域中至多執行一次 只有建立類的例項或者引用類的任何靜態成員才激發靜態建構函式 4 靜態建構函式是不可繼承的,而且不能被直接呼叫。5 如果類中包含用來開...