Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การโอเวอร์โหลดออเปอเรเตอร์ + แบบ Unary ใน C++


บทนำ

คีย์เวิร์ด 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 ไปใช้งาน