(1)首先要承認運算子過載實質就是函式呼叫。
(2)承認operator 就是函式名。
(3)將引數列表補齊,比如a[ i ], 那麼i 就是引數;==> operator(int i);
(4) 根據情況填寫返回值。這一點需要強調(在下面的例子中注釋部分也有體現)。需要強調的是:
運算子過載函式體其實可以有 三種返回值的 寫法,分別為:
1. void array :: operator(int i)
返回void, 那麼cout << a1[i] <<" "; 這句**將無法實現,所以這種寫法pass。
2. int array :: operator(int i)
返回整形的乙個數值,那麼cout << a1[i] <<" ";這句話就可以正常實現了,但是例子中還有這樣一句**,
a1[i] = i; 也就是說在給陣列元素賦值時,[ ] 過載函式的返回值作為左值被賦值為 i。那麼 int array :: operator(int i)
返回乙個整型數值,相當於常量給常量賦值,所以會出現左值無效的錯誤,而第三種返回值寫法正好克服了這一點。
3. int & array :: operator(int i)
返回引用,這樣就可以實現賦值操作了,這就是需要強調的點,函式返回值當左值需要返回乙個引用。
// array.h
#pragma once
#include "iostream"
using namespace std;
class array
;
// array.cpp
#include "array.h"
array :: array(int length)
m_length = length;
m_space = new int[m_length];
}array :: ~array()
}array::array(array const &obj)
}int array::length()
int array :: getarray(int index)
void array :: setarray(int index, int value)
//int &array :: operator(int i)
// testarray.cpp
#include "iostream"
using namespace std;
#include "array.h"
void main()
for (i = 0; i < a1.length(); i++)
cout << endl;
array a2 = a1;
for (i = 0; i < a2.length(); i++)
cout << endl;
system("pause");
}
過載運算子
題目描述 定義乙個矩形類,資料成員包括左下角和右上角座標,定義的成員函式包括必要的建構函式 輸入座標的函式,實現矩形加法,以及計算並輸出矩形面積的函式。要求使用提示中給出的測試函式並不得改動。兩個矩形相加的規則是 決定矩形的對應座標分別相加,如 左下角 1,2 右上角 3,4 的矩形,與 左下角 2...
過載運算子
include include using namespace std class test test const int a v a test const test t1 v t1.v 以下過載小於號 比較兩個物件的大小 bool operator const test t1 const 比較物件...
過載運算子
1.當乙個過載的運算子是成員函式時,this繫結到左側運算物件。成員運算子函式的引數比運算物件的數量少乙個。非成員函式呼叫等價於 data1 data2 普通表示式 operator data1,data2 等價的函式呼叫成員函式呼叫等價於 data1 data2 普通表示式 data1.opera...