บทนำ
คีย์เวิร์ด operator ใช้ประกาศฟังก์ชันที่กำหนดความหมายของสัญลักษณ์ออเปอเรเตอร์เมื่อนำไปใช้กับอินสแตนซ์ของคลาส ทำให้ออเปอเรเตอร์มีความหมายมากกว่าหนึ่งความหมาย หรือเรียกว่า "โอเวอร์โหลด" (Overload) คอมไพเลอร์จะแยกความหมายต่างๆ ของออเปอเรเตอร์โดยตรวจสอบชนิดของออเปอแรนด์ (operand)
ออเปอเรเตอร์ Unary คืออะไร?
ออเปอเรเตอร์ Unary ทำงานกับออเปอแรนด์เพียงตัวเดียว ตัวอย่างของออเปอเรเตอร์ Unary ได้แก่:
- ออเปอเรเตอร์เพิ่ม (++) และลด (--)
- ออเปอเรเตอร์ลบแบบ Unary (-)
- ออเปอเรเตอร์ NOT แบบตรรกะ (!)
ออเปอเรเตอร์ Unary ทำงานกับออบเจ็กต์ที่ถูกเรียก และปกติจะปรากฏทางด้านซ้ายของออบเจ็กต์ เช่น +obj, !obj, -obj, ++obj แต่บางครั้งก็สามารถใช้เป็น Postfix ได้ เช่น obj++ หรือ obj--
ตัวอย่าง: การโอเวอร์โหลดออเปอเรเตอร์ + แบบ Prefix
#include <iostream>
using namespace std;
class Distance {
private:
int feet; // 0 ถึงอนันต์
int inches; // 0 ถึง 12
public:
// Constructor
Distance(int f, int i) {
feet = f;
inches = i;
}
// เมธอดแสดงระยะทาง
void display() {
cout << "F: " << feet << " I:" << inches << endl;
}
// โอเวอร์โหลดออเปอเรเตอร์ + แบบ Prefix
Distance operator+() {
if (inches == 11) {
inches = 0;
feet = feet + 1;
} else {
inches = inches + 1;
}
return Distance(feet, inches);
}
};
int main() {
Distance D1(3, 4), D2(1, 11);
+D1;
D1.display();
+D2;
D2.display();
return 0;
}
ผลลัพธ์
F: 3 I:5 F: 2 I:0
ในตัวอย่างนี้ ออเปอเรเตอร์ + ถูกโอเวอร์โหลดเพื่อเพิ่มค่า inches ขึ้น 1 และปรับค่า feet ตามที่เหมาะสม เมื่อนำ +D1 และ +D2 ไปใช้งาน