說明:在本例中,建立了乙個功能強大的陣列類array,它能夠進行範圍檢查,從而確保陣列下標保持在有效範圍內。這個類允許通過賦值運算子把乙個陣列物件賦值給另乙個陣列物件。
#ifndef array_h_included
#define array_h_included
#include
using
namespace std;
class
array
int&
operator
(int);
intoperator
(int
)const
;private
:int size;
int*ptr;
//指向整型陣列的指標};
#endif
// array_h_included
#include
using
namespace std;
#include
using std::setw;
#include
using std::exit;
#include
"array.h"
array::
array
(int arraysize )
//如 array a1(5);
array::
array
(const array &arraytocopy )
//拷貝建構函式,如array a2(a1);用已有的a1物件初始化a2物件。
:size
(arraytocopy.size)
//成員初始化器初始化a2的size;
array::
~array()
//如果不提供析構函式,系統也能使用預設的析構函式**陣列物件,但對於new開闢的空間不能被**。
int array::
getsize()
const
const array &array::
operator=(
const array &right)
//賦值運算子的過載,如a1 = a2;
for(
int i =
0;i < size;i++
) ptr[i]
= right.ptr[i]
;//把a2的元素依次賦值給a1;
}return
*this
;//返回被a2賦值後的a1;
/*此時使用者抓住了a1的使用權,但開頭有const限制,所以避免了(a1 = a2) = a3的操作。*/
}bool array::
operator==(
const array &right)
const
//判斷兩陣列是不是一樣運算子的過載;
return
false
;return
true;}
int&array::
operator
(int subscript)
//取陣列元素運算子的過載,如a[2]
return ptr[subscript]
;//否則直接返回ptr陣列對應德下標。
}int array::
operator
(int subscript )
const
//const版本返回的沒有引用,
return ptr[subscript]
;//否則直接返回ptr陣列對應德下標。
}//const物件呼叫const函式,即 const物件不能被修改,如a[3] = 10錯誤。
istream &
operator
>>
(istream &input,array &a)
//輸入運算子過載;
return input;
}ostream &
operator
<<
(ostream &output,
const array &a)
//輸出運算子的過載 ;
if(i %4!=
0)output << endl;
return output;
}
#include
using
namespace std;
#include
"array.h"
intmain()
執行結果展示:
運算子類過載
類過載格式 函式型別 operator 運算子名稱 形參表 型引數 使用引數 1 使用 號實現複數相加 不使用類過載 include using namespace std class complex complex double r,double i complex complex add com...
運算子過載 類的賦值運算子過載
下面介紹類的賦值運算子 1.c 中物件的記憶體分配方式 在c 中,物件的例項在編譯的時候,就需要為其分配記憶體大小,因此,系統都是在stack上為其分配記憶體的。這一點和c 完全不同!千 萬記住 在c 中,所有類都是reference type,要建立類的實體,必須通過new在heap上為其分配空間...
C 運算子過載例項
以下示例中定義了乙個class test,過載了 等符號 include include using namespace std class test test const int a v a test const test t1 v t1.v 以下過載小於號 比較兩個物件的大小 bool oper...