โอเวอร์โหลดโอเปอเรเตอร์สามารถทำได้ด้วยโอเปอเรเตอร์ในตัวส่วนใหญ่ใน C++ โอเปอเรเตอร์โอเวอร์โหลดเป็นฟังก์ชันที่มีโอเปอเรเตอร์คีย์เวิร์ดตามด้วยสัญลักษณ์โอเปอเรเตอร์ที่กำหนดไว้ โอเปอเรเตอร์โอเวอร์โหลดมีประเภทส่งคืนและรายการพารามิเตอร์เหมือนกับฟังก์ชันใดๆ
โปรแกรมที่ลบจำนวนเชิงซ้อนโดยใช้โอเปอเรเตอร์โอเวอร์โหลดมีดังนี้ -
ตัวอย่าง
#include<iostream> using namespace std; class ComplexNum { private: int real, imag; public: ComplexNum(int r = 0, int i =0) { real = r; imag = i; } ComplexNum operator - (ComplexNum const &obj1) { ComplexNum obj2; obj2.real = real - obj1.real; obj2.imag = imag - obj1.imag; return obj2; } void print() { if(imag>=0) cout << real << " + i" << imag <<endl; else cout << real << " + i(" << imag <<")"<<endl; } }; int main() { ComplexNum comp1(15, -2), comp2(5, 10); cout<<"The two comple numbers are:"<<endl; comp1.print(); comp2.print(); cout<<"The result of the subtraction is: "; ComplexNum comp3 = comp1 - comp2; comp3.print(); }
ผลลัพธ์
The two comple numbers are: 15 + i(-2) 5 + i10 The result of the subtraction is: 10 + i(-12)
ในโปรแกรมข้างต้น คลาส ComplexNum ถูกกำหนดซึ่งมีตัวแปรจำนวนจริงและอิมเมจสำหรับส่วนจริงและส่วนจินตภาพของจำนวนเชิงซ้อนตามลำดับ คอนสตรัคเตอร์ ComplexNum ใช้เพื่อเริ่มต้นค่าของจริงและอิมเมจ นอกจากนี้ยังมีค่าเริ่มต้นเป็น 0 ซึ่งแสดงในข้อมูลโค้ดต่อไปนี้ -
class ComplexNum { private: int real, imag; public: ComplexNum(int r = 0, int i =0) { real = r; imag = i; } }
ฟังก์ชันที่เป็นโอเปอเรเตอร์โอเวอร์โหลดประกอบด้วยโอเปอเรเตอร์คีย์เวิร์ดตามด้วย - เนื่องจากเป็นโอเปอเรเตอร์ที่โอเวอร์โหลด ฟังก์ชันลบจำนวนเชิงซ้อนสองตัวและผลลัพธ์จะถูกเก็บไว้ในวัตถุ obj2 จากนั้นค่านี้จะถูกส่งกลับไปยังอ็อบเจ็กต์ ComplexNum comp3
ข้อมูลโค้ดต่อไปนี้แสดงให้เห็นถึงสิ่งนี้ −
ComplexNum operator - (ComplexNum const &obj1) { ComplexNum obj2; obj2.real = real - obj1.real; obj2.imag = imag - obj1.imag; return obj2; }
ฟังก์ชัน print() พิมพ์ส่วนจริงและส่วนจินตภาพของจำนวนเชิงซ้อน ดังแสดงไว้ดังนี้
void print() { if(imag>=0) cout << real << " + i" << imag <<endl; else cout << real << " + i(" << imag <<")"<<endl; }