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