運算符重載,就是對已有的運算符重新進行定義,賦予其另一種功能,以適應不同的數據類型。
運算符重載
函數
自定義類的賦值運算符重載函數的作用與內置賦值運算符的作用類似,但是要注意的是,它與拷貝構造函數與析構函數一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定默認的賦值運算符重載函數,那麼系統將會自動提供一個賦值運算符重載函數。示例
下面是Vector的定義—— 包含成員字段、構造函數和一個ToString()重寫方法,以便查看Vector的內容,最後是運算符重載:
namespace Wrox.ProCSharp.OOCSharp
{
struct Vector
{
public double x,y,z;
public Vector(double x,double y,double z)
{
this.x = x;
this.y = y;
this.z = z;
}
public Vector(Vector rhs)
{
x = rhs.x;
y = rhs.y;
z = rhs.z;
}
public override string ToString()
{
return "( " x "," y "," z " )";
}
這裡提供了兩個構造函數,通過傳遞每個元素的值,或者提供另一個複制其值的Vector,來指定矢量的初始值。第二個構造函數帶一個Vector參數,通常稱為複制構造函數,因為它們允許通過複製另一個實例來初始化一個類或結構實例。注意,為了簡單起見,把字段設置為public。也可以把它們設置為private,編寫相應的屬性來訪問它們,這樣做不會改變這個程序的功能,只是代碼會復雜一些。
下面是Vector結構的有趣部分—— 為 運算符提供支持的運算符重載:
public static Vector operator (Vector lhs,Vector rhs)
|