1. 程式人生 > >C/C++基礎----string, vector, array類

C/C++基礎----string, vector, array類

構造 請求 -s 情況 explicit 形式 接收 類類型 const對象

  • IO類屬於不能被拷貝的類型,因此只能通過引用來傳遞。同時讀取和寫入操作都會改變流的內容,所以接收的是普通引用。
  • 類內的友元聲明僅僅指定了訪問的權限,需要在友元聲明之外再專門對函數進行一次聲明。
  • 可變數據成員永遠不會是const,即使它是const對象的成員。
  • 友元關系不存在傳遞性,父類是友元類,子類不繼承。
  • 類在聲明之後定義之前是不完全類型。可以定義指向這種類型的指針或引用,也可以聲明以不完全類型作為參數或者返回類型的函數。
  • 成員初始化順序與其在類定義中出現的順序一致。
  • 委托構造函數,使用類內其他構造函數執行其初始化過程,如果被委托的構造函數體有代碼,執行完這些代碼才將控制權交還給委托者,執行委托者的函數體。
  • 編譯器只會自動進行一步類類型轉換
  • explicit構造函數只能用於直接初始化,而不能用於拷貝形式的初始化。但是仍然可以顯式地進行轉換。

值初始化

int型初始化為0,string初始化為空串。

(1)在數組初始化的過程中,如果提供的初始值數量少於數組的大小,剩下的元素會進行值初始化;

(2)當我們不使用初始值定義一個局部靜態變量時;

(3)當我們通過書寫形如T()的表達式顯示地請求值初始化時;

默認初始化

定義變量時沒有指定初始值,默認值到底是什麽由類型決定,跟定義的位置也有關系。

函數體之外的被定義成0,定義在塊作用域內部的內置變量,值是未定義的。不能直接使用

(1)當我們在塊作用域內不使用任何初始值定義一個非靜態變量時,

(2)當一個類本身含有類類型成員且使用合成的默認構造函數時;

(3)當類類型的成員沒有在構造函數初始值列表中顯示地初始化時;

一個類對象進行默認初始化和值初始化,必須要有相應的默認構造函數。

聚合類,可以使用花括號括起來的成員初始化列表

所有成員public,沒有定義任何構造函數,沒有類內初始值,沒有基類,沒有虛函數。

通常情況類的靜態成員不應該在類的內部初始化。除了const static或者constexpr static不需要分別定義。

即使常量靜態數據成員在類內被初始化了,也應該在類外部定義一下該成員。

C/C++基礎----string, vector, array類