目錄
1.構造函數初始化列表
2.類型轉換
3.static成員
4.友元
5.內部類
6.匿名對象
1.構造函數初始化列表
①之前我們實現構造函數時,初始化成員變量主要使?函數體內賦值,構造函數初始化還有?種?式,就是初始化列表,初始化列表的使??式是以?個冒號開始,接著是?個以逗號分隔的數據成員列表,每個"成員變量"后?跟?個放在括號中的初始值或表達式。
②每個成員變量在初始化列表中只能出現?次,語法理解上初始化列表可以認為是每個成員變量定義初始化的地?。
③引用成員變量,const成員變量,沒有默認構造的類類型變量,必須放在初始化列表位置進?初始化,否則會編譯報錯。
④C++11?持在成員變量聲明的位置給缺省值,這個缺省值主要是給沒有顯?在初始化列表初始化的成員使?的。
⑤盡量使?初始化列表初始化,因為那些你不在初始化列表初始化的成員也會走初始化列表,如果這個成員在聲明位置給了缺省值,初始化列表會?這個缺省值初始化。如果你沒有給缺省值,對于沒有顯?在初始化列表初始化的內置類型成員是否初始化取決于編譯器,C++并沒有規定。對于沒有顯?在初始化列表初始化的?定義類型成員會調?這個成員類型的默認構造函數,如果沒有默認構造會編譯錯誤。
⑥初始化列表中按照成員變量在類中聲明順序進?初始化,跟成員在初始化列表出現的的先后順序?關。建議聲明順序和初始化列表順序保持?致。
初始化列表總結:
?論是否顯?寫初始化列表,每個構造函數都有初始化列表;
?論是否在初始化列表顯?初始化成員變量,每個成員變量都要?初始化列表初始化;
2.類型轉換
②構造函數前?加 explicit就不再?持隱式類型轉換。
③類類型的對象之間也可以隱式轉換,需要相應的構造函數?持

3.static成員
②靜態成員變量為所有類對象所共享,不屬于某個具體的對象, 不存在對象中,存放在靜態區。
④靜態成員函數中可以訪問其他的靜態成員,但是不能訪問?靜態的,因為沒有this指針。
⑤?靜態的成員函數,可以訪問任意的靜態成員變量和靜態成員函數。
⑥突破類域就可以訪問靜態成員,可以通過類名::靜態成員 或者 對象.靜態成員 來訪問靜態成員變量和靜態成員函數。
⑦靜態成員也是類的成員,受public、protected、private 訪問限定符的限制。
⑧靜態成員變量不能在聲明位置給缺省值初始化,因為缺省值是個構造函數初始化列表的,靜態成員變量不屬于某個對象,不?構造函數初始化列表。
//求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
class Sum
{public:Sum()
{_ret += _i;++_i;
}
static int GetRet()
{return _ret;
}
private:static int _i;static int _ret;
};
int Sum::_i = 1;
int Sum::_ret = 0;
class Solution {
public:int Sum_Solution(int n) {// 變?數組(牛客網可以編譯成功,vs還不支持)Sum arr[n];return Sum::GetRet();}
};
4.友元
①友元提供了?種突破類訪問限定符封裝的?式,友元分為:友元函數和友元類,在函數聲明或者類聲明前?加friend,并把友元聲明放到?個類的里?。
②外部友元函數可訪問類的私有和保護成員,友元函數僅僅是?種聲明,他不是類的成員函數。
③友元函數可以在類定義的任何地?聲明,不受類訪問限定符限制。
④?個函數可以是多個類的友元函數。
⑤友元類中的成員函數都可以是另?個類的友元函數,都可以訪問另?個類中的私有和保護成員。
⑥友元類的關系是單向的,不具有交換性,?如A類是B類的友元,但是B類不是A類的友元。
⑦友元類關系不能傳遞,如果A是B的友元, B是C的友元,但是A不是C的友元。
⑧有時提供了便利。但是友元會增加耦合度,破壞了封裝,所以友元不宜多?。
5.內部類
? 內部類默認是外部類的友元類。
? 內部類本質也是?種封裝,當A類跟B類緊密關聯,A類實現出來主要就是給B類使?,那么可以考慮把A類設計為B的內部類,如果放到private/protected位置,那么A類就是B類的專屬內部類,其他地?都?不了。

6.匿名對象
②匿名對象?命周期只在當前??,?般臨時定義?個對象當前??下即可,就可以定義匿名對象。
