C 物件導向程式設計 過載

2021-07-28 12:09:35 字數 2297 閱讀 3724

過載:一名多用

運算子的過載:

實質是函式的過載,過載函式一般格式如下:

函式型別 operator 運算子名稱(形參表)

運算子過載規則:

c++不允許使用者定義自己定義的新的運算子,只能對已有的運算子進行過載。

不能過載的運算子:

.(成員訪問運算子)

*(成員指標訪問運算子)

::(域運算子)

sizeof(長度運算子)

?:(條件運算子)

過載不能改變運算子物件(運算元)的個數。

過載不能改變優先級別。

過載不能改變運算子的結核性。

過載的運算子的函式不能有預設引數。

過載的運算子必須和使用者自定義型別的物件一起使用,其引數至少應該有乙個是類的物件(或類物件的引用)

用於類物件的運算子一般都必須過載,但是有兩個例外,運算子「=」和「&」不必使用者過載。但是預設的「=」運算子是淺拷貝,在資料成員中包含指向動態分配的記憶體指標時,在複製此成員時就會出現危險。這種情況下就需要自己過載賦值運算子。

c++規定,「=」,下標運算子「[ ]」,函式呼叫運算子"( )",成員運算子「->」等必須作為成員函式。

插入流「<<」和流提取運算子「>>」,型別轉換運算子不能定義為類的成員函式,只能定義為友元函式。

運算子過載函式作為類成員函式和友元函式:

成員函式:c1 + c2;     編譯器解釋為:c1.operator+(c2);     //可通過this指標自由的訪問本型別的資料,因此可以少寫乙個函式的引數

友元函式:c1 + c2;     編譯器解釋為:operator+(c1,c2);     

++和--(單目)運算子的過載:

c++約定,在自增,自減運算子過載函式中,增加乙個int型的引數,就是後置自增,自減運算子函式。

如:time operator++(int )

過載插入流運算子和流提取運算子:

istream &operator>>(istream &,自定義類 &);

ostream &operator<<(ostream &,自定義類 &);

過載運算子「>>」的函式的第乙個引數和函式的型別都必須是istream&類(即istream類物件的引用)。

過載運算子「<<」的函式的第乙個引數和函式的型別都必須是ostream&類(即ostream類物件的引用)。

注意在過載函式內要把插入流和輸出流的現狀範圍,即保留輸出流、插入流的現狀。否則不能連續的輸出和插入資訊。

如:cout << variable1 << variable2 ;

cout << variable;      解釋為:operator<<(cout , variable);

不同型別資料間的轉換:

轉換建構函式:

將其他型別的乙個資料轉換成乙個類的物件。轉換建構函式只有乙個形參。如果有多個引數,就不是轉換建構函式。

如:complex( double r)

complex( 2.3 );     //進行型別轉換

型別轉換函式(型別轉換運算子過載函式):

將乙個類的物件轉換成另一類的資料。

如:operator double( )

在函式名前面不能指定函式型別,函式沒有引數。其返回值的型別是由函式名中指定的型別名來指定的。

型別轉換函式只能作為成員函式,因為轉換的主體是本類的物件,不能作為友元函式或者普通函式。

在定義了型別轉換函式後系統會在程式的表示式中自動檢測是否需要進行型別轉換。

如:double d;complex v1;

d= v1 + 2.2;     

當使用者沒有對「+」進行過載的時候,系統就可以把v1自動轉換為double型別的資料後,再進行運算。

如果運算子過載為成員函式,它的第乙個引數必須是本類的物件。當第乙個運算元不是類物件時,不能將運算子函式過載為成員函式。如果將運算子過載函式過載為類的成員函式,交換律不適用。

在定義轉換建構函式和型別轉換運算子過載函式時,必須注意不要引起二義性。

c 物件導向程式設計 物件導向

什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...

C 物件導向函式過載

設計乙個日期類date,該類包含資料成員 year 年 month 月 day 日 定義建構函式。要求 1 過載日期加上天數的加法運算子 例如 給乙個日期加上10天 2 過載日期的自增運算子 需要滿30進一天 includeusing namespace std class date date in...

物件導向 過載

運算子過載,尤其是前置自增和後置自增。includeusing namespace std class fraction fraction int a,int b num1 a num2 b fraction operator const fraction f const fraction oper...