運算子多載(operator overloading)為自訂運算子如+
、-
、*
、/
、>
、<
、==
等的作用。
運算子可直接在原始數字型別如int
、double
等作用,例如+
為前運算元加後運算元;-
為前運算元減後運算元。
main.cpp
#include <iostream>
using namespace std;
int main() {
int a = 1;
int b = 2;
cout << a + b << endl; // 3
cout << a - b << endl; // -1
return 0;
}
但對自訂型別如類別若要以運算子計算則必須實作運算子的功能,此即為運算子多載。運算子多載是透過多載operator
關鍵字後接運算子的函式/方法來實現。
例如下面對類別Point
的+
及-
做運算子多載,如此Point
物件即可以+
及-
做運算。
main.cpp
#include <iostream>
#include <string>
using namespace std;
class Point {
private:
int x;
int y;
public:
Point(int x, int y) : x{x}, y{y} {};
// operator '+' overloading
Point operator+(const Point& pr) { return {x + pr.x, y + pr.y}; }
// operator '-' overloading (prototype)
Point operator-(const Point& pr);
int GetX() { return x; }
int GetY() { return y; }
};
// operator '-' overloading (body)
Point Point::operator-(const Point& pr) { return {x - pr.x, y - pr.y}; }
int main() {
Point p1 = {1, 2};
Point p2 = {3, 4};
Point p3 = p1 + p2; // call overloaded operator '+'
cout << to_string(p3.GetX()) << endl; // 4
cout << to_string(p3.GetY()) << endl; // 6
Point p4 = p2 - p1;
cout << to_string(p4.GetX()) << endl; // 2
cout << to_string(p4.GetY()) << endl; // 2
return 0;
}
沒有留言:
張貼留言