函式的寫法 建構函式你還真不一定會玩

2021-10-14 19:15:12 字數 1465 閱讀 6000

關注「杜明c」,每天進步一點點!

什麼是建構函式建構函式是類的特殊成員函式,當我們定義乙個類時,會自動呼叫類的建構函式,來對類成員進行初始化。另外建構函式不能指定返回值。對我們使用者而言,如果不主動編寫建構函式,編譯器會自動生成預設的建構函式。

class test; //建構函式和類同名};建構函式可以過載嗎建構函式可以過載,但是我們需要注意,當使用者寫了任意乙個建構函式,編譯器將不再為該類生成別的建構函式。

什麼意思呢?我們來看乙個例子

class test;          //編譯器將不再自動生成預設的建構函式,如下    test():{};      };
可能有同學要問,為什麼一定要有預設的建構函式,沒有的話不也能正常執行嗎,確實是的,當沒有預設的建構函式時,我們的程式是能夠正常執行,但是該類每一次構造都需要顯示輸入引數來初始化。

不能作為動態分配陣列的元素型別。

靜態的分配陣列也必須提供引數進行初始化。

所以加上預設的建構函式準沒錯。建構函式初始化式現在我們來了解一下,怎麼樣寫乙個建構函式。建構函式初始化式的寫法和普通函式不太相同,可能讓我們有些不適應,我們來看乙個例子

注意:在建構函式初始化式中不能對同乙個變數兩次賦值。

class test;//請注意,對成員的初始化我們放在了括號外,且用逗號分隔};
為什麼要這樣寫呢,我按照常規的寫法不是也ok嗎?
//這樣寫是完全ok的class test;};
程式在執行到建構函式括號裡之前,實際上已經對成員變數進行了一次賦值,在建構函式括號裡的賦值實際上是對成員變數值的一次覆蓋,使用建構函式初始化式才能最高效初始化。

如果某成員變數是乙個類,且沒有預設建構函式,那麼不使用建構函式初始化式將導致初始化失敗。

建構函式還有什麼講究有些同學學習了建構函式,就會不自覺的產生這樣的寫法,是錯誤的。

test t1();  //試圖這樣來定義乙個test類,是錯誤的,我們需要去掉括號test t1;  //√
使用建構函式初始化式的時候,程式並不是按照你寫的順序對成員進行初始化賦值,而是按照成員在類中的定義順序來進行初始化。

當a為b的父類時,a的建構函式先執行。

end

杜明c專注c/c++

長按關注

你不一定懂的cpu顯示資訊

你不一定懂的cpu顯示資訊 在使用top命令的時候會看到這麼一行 裡面的各個值分別是什麼意思呢?今天被問到這個問題,發現答的不是很清楚。果然啊,天天用最多的top命令都還沒摸透。慚愧。於是就查了些資料 cpu s 表示的是cpu資訊。各個值的意思是 好了,如果說列出上面的條條框框說我懂了,那真是自欺...

你不一定懂的cpu顯示資訊

在使用top命令的時候會看到這麼一行 裡面的各個值分別是什麼意思呢?今天被問到這個問題,發現答的不是很清楚。果然啊,天天用最多的top命令都還沒摸透。慚愧。於是就查了些資料 cpu s 表示的是cpu資訊。各個值的意思是 好了,如果說列出上面的條條框框說我懂了,那真是自欺欺人了。下面是我自己的理解 ...

你不一定懂的cpu顯示資訊

在使用top命令的時候會看到這麼一行 裡面的各個值分別是什麼意思呢?今天被問到這個問題,發現答的不是很清楚。果然啊,天天用最多的top命令都還沒摸透。慚愧。於是就查了些資料 cpu s 表示的是cpu資訊。各個值的意思是 好了,如果說列出上面的條條框框說我懂了,那真是自欺欺人了。下面是我自己的理解 ...