目錄
11 使用類
11.1 運算符重載
11.2 計算時間:一個運算符重載示例
11.2.1 添加加法運算符。使用operator+ 函數。
11.2.2 重載限制。
11.2.3
11.3友元
11.3.1 建立友元
11.3.2 常用的友元:重載<<運算符
11.4 重載運算符:作為成員函數函數非成員函數
11.5 再談重載:一個矢量類
11.6 類的自動轉換和強制類型轉換
11.6.1 轉換函數(将類轉換成int/double等)
11.6.2 轉換函數和友元函數。
11 使用類
11.1 運算符重載
C++允許運算符重載擴充到使用者定義的類型。
重載運算符使用運算符函數。
運算符函數格式如下:
operatorop(argument-list)
E:
Time operator+(const Time &t)const; //重載+運算符。
11.2 計算時間:一個運算符重載示例
11.2.1 添加加法運算符。使用operator+ 函數。
運算符左側是調用對象,右側是參數(被傳遞的對象)。
11.2.2 重載限制。
1.重載後的操作符至少有一個操作數是使用者自定義類型。
2.不能違反運算符原來的運算規則。
3.不能建立新的運算符
4.不能重載某些特殊運算符
如:
sizeof , . , .* , :: , ?: , ...(其餘的略去,因為很少見到)
- 大多數運算符都可以通過成員函數或者非成員函數進行重載,但是一下運算符隻能通過成員函數進行重載。
= , () , [] , -> ,
11.2.3
11.3友元
通常,公有類方法提供唯一的通路類對象的私有部分(private)的通路,但是有時這種限制太嚴格。
C++提供另一種形式的通路權限:友元。
友元有三種:
友元函數;
友元類;
友員成員函數。
11.3.1 建立友元
1.将其原型放在類聲明中,并且在原型聲明前加上關鍵字friend:
friend Time operator*(double m, const Time &t);
這使得非成員函數operator*()和成員函數的通路權限相同。
2.編寫函數定義
它不是成員函數,不使用Time::限定,也不要在定義中使用friend,定義如下:
Time operator*(double m, const Time & t)
{
Time result;
long totalminutes = (t.hours * 60 + t.minutes)*mult;
result.hours = totalminutes / 60;
result.minutes = totalminutes % 60;
return result;
}
11.3.2 常用的友元:重載<<運算符
11.4 重載運算符:作為成員函數函數非成員函數
兩者選一個,有時成員函數是唯一選擇。
通常沒有太大差別。
11.5 再談重載:一個矢量類
11.6 類的自動轉換和強制類型轉換
構造函數用作自動(隐式)類型轉換函數,(double/int等轉換成類)
關鍵字explicit用于關閉這種特性。
11.6.1 轉換函數(将類轉換成int/double等)
建立轉換函數:
operator typeName();
要求:
轉換函數必須是類方法;不能指定傳回類型;不能有參數;
例子:
operator double();