類和對象
一,對象的大小不考慮方法和靜态變量
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)