首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C++ 類別核心三大函式:進階議題—偷懶技巧與繼承實作

     編輯:VC 教學

指派函式的四步驟精華

String 指派函式比建構函式複雜,分四步完成:

  1. 檢查自我指派:if (this == &other) return *this;
    看似多餘,但間接自我指派極易發生(如 b=a; c=b; a=c; 或 b=&a; a=*b;)。若忽略檢查,步驟二的 delete 會導致物件「自殺」後無法複製。
  2. 釋放原有記憶體:delete[] m_data;,延遲釋放會造成記憶體洩漏。
  3. 配置新記憶體並複製:注意 strlen 不含結束符,strcpy 會複製結束符。
  4. 回傳 *this:支援 a = b = c 鏈式指派。切勿寫成 return this(型別錯誤)或 return other(other 可能為暫時物件,回傳後成懸空參考)。

9.7 偷懶招:宣告為 private 禁用複製

若不想撰寫複製建構/指派函式,又不允許使用編譯器預設版本,最簡單做法是將它們宣告為 private 且不提供定義:

class A {
private:
    A(const A& a);            // 私有複製建構函式
    A& operator=(const A& a); // 私有指派函式
};

任何嘗試複製或指派 A 物件的程式碼(如 A b(a); b = a;)都會導致編譯錯誤,因外部無法存取私有函式。這是「不可複製類別」的經典手法(C++11 後可用 = delete 更明確)。

9.8 派生類別中實作類別基本函式

基底類別的建構、解構、指派函式不會被繼承。派生類別撰寫時須注意:

  • 建構函式:必須在初始化列表中顯式呼叫基底類別建構函式。
  • 解構函式:基底與派生類別的解構函式應宣告為 virtual,確保透過基底指標刪除派生物件時能正確呼叫派生類別解構函式,避免資源洩漏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved