運算子過載就是指重寫 1+1 = ?中的加號「+」,那樣我們可以實現1 + 1 = 1。類似的,其他運算子過載也是這樣的道理,然運算子的過載用來幹這些事顯得雞肋了些,更多的是,通過運算子過載去實現一般的加減乘除不能實現的運算,例如:
——>向量的加減乘除?
class program
", vect1.tostring());
console.writeline("vect2 = ", vect2.tostring());
console.writeline("vect3 = ", vect3.tostring());
console.writeline("vect1 == vect4 ", vect1 == vect4);
console.readkey();}}
/// /// 向量結構
///
struct vector
public vector(vector rhs)
public override string tostring()
/// /// 向量加法
///
///
///
///
public static vector operator +(vector lhs, vector rhs)
/// /// 向量點積
///
///
///
///
public static vector operator *(double lhs, vector rhs)
/// /// 向量點積
///
///
///
///
public static vector operator *(vector rhs, double lhs)
public static bool operator ==(vector lhs, vector rhs)
public static bool operator !=(vector lhs, vector rhs)
}
以上兩種比較方式存在問題:
1、如果某引數為null,則出現 null.equals(obj) 的情況,會觸發空引用異常
2、這樣的比較無法確認只是值相等,不是指向同乙個東西(值相等,位址不同),還是指向同乙個(即值與位址都相等)
3、過載了「==」、「!=」運算子卻沒有沒有實現object.equals(obj)方法(這裡對本例來說,不是很重要,但應當知道程式的缺點在哪)
上述的「!=」、「==」比較方式僅根據向量元素的值,來對它們進行相等性比較。對於大多數結構,這就是我們希望的,但在某些情況下,可能需要仔細考慮相等的含義。例如,如果有嵌入的類,那麼是應比較引用 是否指向同乙個物件(淺度比較),還是應比較物件的值是否相等(深度比較)? 淺度比較是比較物件是否指向記憶體中的同乙個位置,而深度比較是比較物件的值和屬性是否相等.
C 關於運算子過載
過載運算子的函式一般格式如下 函式型別 operator 運算子名稱 形參表列 例如,想將 用於complex類 複數 的加法運算,函式的原型可以是這樣的 complex operator complex c1,complex c2 在上面的一般格式中,operator是關鍵字,是專門用於定義過載運...
關於運算子過載
之前看 effective c 的時候,對這一部分印象比較深刻,雖然讀的時候有寫筆記,但是現在還是寫下來我對這一部分理解。詳細的內容可以看條款19 分清成員函式,非成員函式和友元。條款19的結論如下 只有在下列情況下,讓函式f成為類c的非成員函式。其餘情況,f都宣告為c的成員函式。1 operato...
關於運算子過載
所謂運算子過載其實就是對於運算子針對不同操作物件而實現不同功能,其實質就是函式過載 函式過載前面有一篇介紹 實現過程就是先把運算表示式轉化為對運算子函式的呼叫,把運算物件轉化為運算函式的實參,然後根據實參的型別確定需要呼叫的函式。另外,c 標準規定了一些不能過載的操作符,分別是 1.類屬關係運算子 ...