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

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


บทนำ

คีย์เวิร์ด 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 ได้แก้ไขแล้วในตัวอย่างข้างต้น