《C Primer》筆記 第7章 類

2022-06-05 06:00:09 字數 1790 閱讀 3782

引入this

引入const成員函式

類作用域和成員函式

在類的外部定義成員函式

定義乙個返回this物件的函式

不能依賴合成的預設建構函式

= default的含義

建構函式初始值列表友元的宣告定義乙個型別成員

令成員作為內聯函式

可變資料成員

類資料成員的初始值類的宣告令成員函式作為友元

函式過載和友元

友元宣告和作用域

對於定義在類內部的成員函式來說,解析其中名字的方式與上述的查詢規則有所區別:

編譯器處理完類中的全部宣告後才會處理成員函式的定義。

按照這種兩段的方式處理類可以簡化類**的組織方式。因為成員函式體直到整個類可見後才會被處理,所以它能使用類中定義的任何名字。相反,如果函式的定義和成員的宣告被同時處理,那麼我們將不得不在成員函式中只使用那些已經存在的名字。

用於類成員宣告的名字查詢

型別名要特殊處理

成員定義中的普通塊作用域的名字查詢

儘管類的成員被隱藏了,但我們仍然可以通過加上類的名字或顯式地使用this指標來強制訪問成員。

void screen::dummy_fcn(pos height) // 不建議隱藏類中同名的成員

類作用域之後,在外圍的作用域中查詢

在檔案中名字的出現處對其進行解析建構函式的初始值有時必不可少

成員初始化的順序

預設實參和建構函式

值初始化在以下情況下發生:

類必須包含乙個預設建構函式以便在上述情況下使用,其中的大多數情況非常容易判斷。不那麼明顯的一種情況是類的某些資料成員缺少預設建構函式:

class nodefault

; struct a

; a a; // 錯誤:不能為a合成建構函式

struct b

// 錯誤:b_member沒有初始值

nodefault b_member;

}

在實際中,如果定義了其他建構函式,那麼最好也提供乙個預設建構函式。

使用預設建構函式抑制建構函式定義的隱式轉換

explicit建構函式只能用於直接初始化

為轉換顯式地使用建構函式

標準庫中含有顯式建構函式的類

struct data

;

我們可以提供乙個花括號括起來的成員初始值列表,並用它初始化聚合類的資料成員:data val1 = ;。初始值的順序必須與宣告的順序一致data val2 = ;錯誤。如果初始值列表中的元素個數少於類的成員數量,則靠後的成員被值初始化。初始值列表的元素個數絕對不能超過類的成員數量。

顯式地初始化類的物件存在三個明顯的缺點:

constexpr建構函式宣告靜態成員

使用類的靜態成員

class account

static double rate()

static void rate(double);

private:

std::string owner;

double amount;

static double interestrate;

static double initrate();

};

定義靜態成員

靜態成員的類內初始化

靜態成員能用於某些場景,而普通成員不能

C primer學習筆記 第7章

1.形參的初始化與變數的初始化一樣 如果形參具有非引用型別,則複製實參的值,如果形參為引用型別,則它只是實參的別名。2.c中習慣用傳遞指標來實現對實參的訪問。c 中,使用引用形參更安全。3.如果使用引用形參唯一的目的是避免複製形參,則應將形參定義為const引用。4.非const引用形參 只能與完全...

C Primer第5版讀書筆記(第7章 類)

第7章 類 const成員函式 7.1.4 建構函式 預設建構函式,可以使用 default進行定義。和其他函式一樣,如果 default在類的內部,則預設建構函式是內聯的 如果它在類的外部,則該成員預設情況下不是內聯的 7.2 訪問控制與封裝 class與struct的唯一區別為class的預設訪...

《C primer》第7章 7 3類的其它特性

類可以自定義某種型別在類中的別名,以此隱藏類的實現細節 區別於普通成員,類的自定義型別的成員必須先定義後使用 令成員作為內聯函式 在類中定義的函式本身就是內聯的,所以可以不必使用inline,但若使用了inline也是合法的,而類外部定義的函式則需要使用inline說明一下 可變資料成員 在變數宣告...