C 筆記之建構函式

2021-07-26 12:51:32 字數 2088 閱讀 5840

以下部分截圖取自慕課網相關課程

建構函式在物件例項化是被自動呼叫;

建構函式與類同名;

建構函式沒有返回值;

建構函式可以有多個過載形式;

例項化物件時僅用到乙個建構函式;

建構函式的引數可以有預設值,如果建構函式也使用類外定義,那麼在函式實現部分不用寫預設值,這一點和普通類外定義函式的預設值是一樣的;

當使用者沒有定義建構函式時,編譯器自動生成乙個建構函式,這個函式什麼也不做。

乙個銀行賬戶類account,寫在account.h標頭檔案中

#include 

#include

using

namespace

std;

class account ;

下面的**寫在account.cpp原始檔中

#include "account.h"

#include

#include

using

namespace

std;

/*這裡用到了初始化列表,括號裡面的資料是靜態的,資料成員首先被初始化列表裡面的數賦值,如果函式體中再次改變資料成員的值,以最後的修改結果為準*/

account::account():m_strname("tom"), m_ibalance(100)

/*這裡用到了初始化列表,括號裡面的資料和引數列表相對應,根據不同的引數動態獲得,資料成員首先被初始化列表裡面的數賦值,如果函式體中再次改變資料成員的值,以最後的修改結果為準*/

account::account(string name, int balance):m_strname(name), m_ibalance(balance)

string account::getname()

int account::getbalance()

int main()

初始化列表先於建構函式執行;

初始化列表只能用於建構函式或拷貝建構函式;

初始化列表可以同時初始化多個資料成員;

由於初始化列表的效率高、速度快,推薦使用初始化列表來初始化資料成員。

以2.1中的account類為例,裡面有乙個資料成員m_strname是常量,因此不能用普通的方法對其賦值,只能用初始化列表的方式對其進行賦值。

在上面這張中我們可以看到,在main函式中例項化了3個student類,但是結果卻是只列印了乙個「student」,這個「student」是在例項化stu1的時候列印的,而在例項化stu2和stu3的時候並沒有列印,也就是在例項化stu2和stu3的時候並沒有呼叫那個無參的建構函式。那麼在例項化stu2和stu3的時候呼叫的哪個建構函式呢?答案就是拷貝建構函式。

如果沒有自定義的拷貝建構函式,則系統自動生成乙個預設的拷貝建構函式;當採用直接初始化或複製初始化例項化物件時,系統自動呼叫拷貝建構函式。

定義拷貝建構函式的格式:類名(const 類名 &變數名)

拷貝建構函式的使用方法:

//檔名為student.h

#include

#include

using

namespace

std;

class student ;

#include "student.h"

student::student()

student::student(const student &stu)

void test(student stu)

int main()

上面的**的執行結果為:

拷貝建構函式也可以使用初始化列表。

C 學習筆記之建構函式(一)預設建構函式

定義 在未提供顯式的初始值時,用來建立物件的建構函式。舉例 class testclass private int m a int m b public testclass 預設建構函式1 testclass int a,int b 建構函式 testclass int a 10,int b 5 預...

C 建構函式之預設建構函式

參考部落格 以下內容是在上述博主的部落格中提煉出來的 一 預設建構函式的含義是啥 主要就是 預設建構函式在呼叫的時候不需要顯示傳入實參的建構函式 二 預設的建構函式的分類 1 無參建構函式 就是沒有引數的建構函式 class sample 2 帶有形參,並且帶有預設值的建構函式 class samp...

C 建構函式之委託建構函式

委託建構函式 c 11新標準擴充套件了建構函式初始值的功能,使得我們可以定義所謂的委託建構函式。乙個委託建構函式使用它所屬類的其他建構函式執行它自己的初始化過程,或者說它把它自己的一些 或者全部 職責委託給了其他建構函式。和其他建構函式一樣,乙個委託建構函式也有乙個成員初始值的列表和乙個函式體。在委...