首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 類模板與運算符重載常見錯誤修正:語法、友元函數、賦值運算符與邊界檢查

     編輯:程式設計疑難解答

原代碼主要錯誤

  1. 移位運算符輸入錯誤:<<、>> 被輸入为全角「<<」「>>」,導致編譯失敗。
  2. 友元函數類外定義保留 friend:類外實現時不能加 friend 關鍵字。
  3. 賦值運算符 operator= 缺少類名限定:應為 Array<T>& Array<T>::operator=(const Array<T>&)。
  4. 加法運算符越界風險:兩數組長度不等時,按最大長度循環會訪問短數組越界下標。

修正要點

1. 友元函數正確寫法

// 類內聲明
friend Array<T> operator+(const Array<T>& a, const Array<T>& b);
// 類外定義(無 friend)
template <typename T>
Array<T> operator+(const Array<T>& a, const Array<T>& b) { ... }

2. 賦值運算符返回引用并處理自賦值

template <typename T>
Array<T>& Array<T>::operator=(const Array<T>& rhs) {
    if (this == &rhs) return *this; // 自賦值檢查
    delete[] A;
    L = rhs.L;
    A = new T[L];
    for (int i=0; i<L; i++) A[i] = rhs.A[i];
    return *this;
}

3. 加法運算符處理不同長度

template <typename T>
Array<T> operator+(const Array<T>& a, const Array<T>& b) {
    Array<T> c;
    int maxLen = (a.L > b.L) ? a.L : b.L;
    c.L = maxLen;
    c.A = new T[maxLen];
    for (int i=0; i

其他建議

  • 使用 std::vector<T> 替代手動 new[]/delete[],自動管理內存、避免泄漏。
  • 拷貝構造函數參數應為 const 引用:Array(const Array<T>&)。
  • 輸出運算符 operator<< 也應重載为友元。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved