運算子重載(operator overloading)
學完物件導向程式設計後可以來了解重載運算子重載,operator
overloading也可以叫做運算子覆載,或運算子多載,反正意思差不多,這裡就稱為重載運算子重載,至於為何要使用運算子重載呢?先來看一個例子:
1
2
3
4
5int main(void){
int a = 4, b = 6, c;
c = a + b;
std::cout << c; //output:10
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using namespace std;
class data{
public:
int a,b;
data(int,int);
};
data::data(int x = 0,int y = 0){
a = x;
b = y;
}
int main(){
data d1(3,4), d2(6,3), d3;
d3 = d1 + d2;
return 0;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using namespace std;
class data{
public:
int a,b;
data(int,int);
void print_data();
data operator+(data &y_data){
int a_plus = a + y_data.a;
int b_plus = b + y_data.b;
data z_data(a_plus,b_plus);
return z_data;
}
};
data::data(int x = 0,int y = 0){
a = x;
b = y;
}
int main(){
data d1(3,4), d2(6,3), d3;
d3 = d1 + d2;
cout << d3.a << " " << d3.b << endl;
return 0;
}
在使用sort()函式時也可以使用運算子重載: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using namespace std;
class data{
public:
int a,b;
data(int,int);
bool operator < (data &y_data){
if(b < y_data.b);
else return b < y_data.b;
}
};
data::data(int x = 0,int y = 0){
a = x;
b = y;
}
int main(){
data arr[5];
srand(time(NULL));
for(int i = 0;i < 5;i++){
arr[i].a = i;
arr[i].b = rand()%30+1;
}
for(int i = 0;i < 5;i++) cout << arr[i].a << " " << arr[i].b << endl;
sort(arr,arr+5);
cout << "===========" << endl;
for(int i = 0;i < 5;i++)
cout << arr[i].b << " ";
cout << endl;
return 0;
}<
這個符號重新定義,使我們的sort在比較的時候,能清楚知道如何比較,然而我們這邊這樣定義運算子重載是不太好的,好一點的作法如下:
1
2
3
4bool const operator < (data &y_data) const {
if(b < y_data.b);
else return b < y_data.b;
}