類
來自 cppreference.com
類是使用者定義型別。
類型別由類說明符定義,其出現在宣告語法的 decl-specifier-seq 中。參閱類宣告以瞭解類說明符的語法。
類可以有以下種類的成員
1) 資料成員
b) 靜態資料成員
2) 成員函式
a) 非靜態成員函式
b) 靜態成員函式
3) 巢狀型別
所有成員都在類定義中一次性定義,不能新增到已定義的類中(與名稱空間成員不同)。
如果類 T
的成員是以下之一,則不能使用 T
作為其名稱:
- 靜態資料成員,
- 成員函式,
- 成員型別,
- 成員模板,
- 列舉的列舉器(除非列舉有作用域)(C++11 起),或
- 成員匿名聯合的成員。
然而,只要沒有使用者宣告的建構函式,非靜態資料成員可以使用名稱 T
。
一個至少有一個宣告或繼承的虛成員函式的類是多型的。此型別的物件是多型物件,並在物件表示中儲存執行時型別資訊,可以使用 dynamic_cast
和 typeid
查詢。虛成員函式參與動態繫結。
一個至少有一個宣告或繼承的純虛成員函式的類是抽象類。此型別的物件不能被建立。
(C++11 起) |
目錄 |
[編輯] 類的屬性
平凡可複製類一個平凡可複製類是指:
標準佈局類一個標準佈局類是指:
標準佈局結構體是使用類關鍵詞 struct 或類關鍵詞 class 定義的標準佈局類。標準佈局聯合體是使用類關鍵詞 union 定義的標準佈局類。 |
(C++11 起) |
[編輯] 隱式生命週期類
一個隱式生命週期類是指:
注:缺陷報告 P0593R6 澄清了隱式生命週期屬性。
[編輯] POD 類一個POD 類是指:
POD 結構體是非聯合 POD 類。POD 聯合體是作為 POD 類的聯合體。 |
(C++20 中已棄用) |
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
CWG 148 | C++98 | POD 類不能包含指向成員的指標, 它們本身就是 POD(標量)型別 |
限制已移除 |
CWG 383 | C++98 | POD 類中可以使用者聲明覆制賦值運算子或解構函式,如果它們未定義。 若未定義,則在 POD 類中 |
不允許 |
CWG 1363 | C++11 | 一個同時擁有平凡預設建構函式和非平凡 預設建構函式的類可能是平凡的 |
它不是平凡的 |
CWG 1496 | C++11 | 一個只擁有建構函式且所有建構函式 都定義為已刪除的類可能是平凡的 |
它不是平凡的 |
CWG 1672 | C++11 | 一個類可能是標準佈局類 如果它有多個空基類 |
它不是標準佈局類 |
CWG 1734 | C++11 | 平凡可複製類不能有非平凡的 已刪除的複製/移動建構函式/賦值運算子 |
如果已刪除,可以是平凡的 |
CWG 1813 | C++11 | 一個類如果有一個基類繼承了非靜態資料成員,則它從不是標準佈局類。 基類繼承非靜態資料成員 |
它可以是標準佈局類 |
CWG 1881 | C++11 | 對於標準佈局類及其基類, 未命名的位域可能在 宣告資料成員的不同類中宣告 |
所有非靜態資料成員 和位域需要首先 在同一個類中宣告 |
CWG 1909 | C++98 | 成員模板可以與其類同名 | 已禁止 |
CWG 2120 | C++11 | 在確定標準佈局類時,M(X) 的定義沒有考慮 沒有考慮其第一個成員是陣列的 一個類的情況 |
在 M(X) 的定義中 解決了這種情況 |
CWG 2605 | C++98 | 隱式生命週期類可以擁有使用者提供的解構函式 | 已禁止 |