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