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

C++ 型別轉換函數建構子參數賦值反向導致異常結果的修正

     編輯:程式設計綜合問答

問題程式碼

Complex(double r, double i) { r = real; i = imag; } // 參數賦值給成員?反了!

錯誤分析

建構子參數 r, i 是**輸入值**,成員變數 real, imag 是**儲存目標**。正確賦值方向為 **成員 = 參數**:

Complex(double r, double i) { real = r; imag = i; }

原寫法導致 real, imag 未初始化 (隨機值),後續 operator double() { return real; } 返回垃圾值,故 d = 2.5 + c1 產生 -9.25596e+061 等異常數字。

完整修正類別

class Complex {
public:
    Complex() : real(0), imag(0) {}
    Complex(double r, double i) : real(r), imag(i) {} // 使用初始化列表
    operator double() const { return real; } // 加 const
private:
    double real, imag;
};

補充建議

  • **使用初始化列表** `: real(r), imag(i)` 效率更高、可初始化 const/引用成員。
  • operator double() 加 const,允許常數物件呼叫。
  • 譚浩強教材程式碼錯誤極多,建議改用《C++ Primer》或《Effective C++》等經典教材。

總結

建構子參數賦值方向反向是新手常見錯誤,導致成員未初始化,型別轉換返回垃圾值。修正賦值方向並採用初始化列表即可解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved