天天看點

C++primer -2

類和對象

一,對象的大小不考慮方法和靜态變量

cpp中 struct-》public class

對象産生-》1.開辟記憶體(産生this指針)2.調用構造函數

對象析構-》1.處理對象占用的外部資源 2.釋放對象記憶體

成員方法中參數清單中隐藏有一個對象的位址(C *const this)

類體内定義的方法被處理成内聯方法(編譯時檢查)

1>拷貝構造:有指針時預設拷貝構造函數會發生淺拷貝(析構出錯),要自定義拷貝構造函數

2>指派運算法重載:1.防止自指派 2.釋放this 3.重新配置設定記憶體 拷貝資料

二,對象生存周期:

1>臨時對象:(沒有出現類名)CGood g1 = CGood(xxxx);

注:臨時對象去拷貝構造對象時 臨時對象會被優化掉;是以在函數傳參時 傳引用可以避免産生臨時對象;

臨時對象可以使用引用 但是不能使用指針(語句結束就會析構)

2>隐式生成臨時對象:

自定義類型的産生的臨時量是變量 隐式生成臨時對象是常對象

要使用常引用

3> 函數中 對象生存周期:

如果函數的傳回的是一個對象=》在調用該函數之前會在主函數的棧上開辟一個臨時記憶體(給函數傳回的對象用)

注: 減少開銷=》1.傳參傳引用 2.傳回臨時對象 3.初始化的方式接收傳回值

三,靜态/常量

靜态成員變量要在類外初始化 且不計入對象的大小 所有的對象共享;

靜态成員方法不依賴對象 隻依賴類作用域(實參清單裡面沒有this),隻能通路靜态成員變量,但是普通方法也可以使用常成員

常對象不能使用普通方法=》實參形參清單不比對:常對象實參(const CGood const *this)

繼續閱讀