Nạp chồng toán tử (operator overloading) có thể làm với hầu hết toán tử built-in C++. Toán tử nạp chồng là hàm với từ khóa operator theo sau bởi ký hiệu toán tử. Toán tử nạp chồng có kiểu trả về và danh sách tham số như hàm thường.
Chương trình trừ số phức bằng nạp chồng toán tử:
Ví dụ
#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 << "Hai số phức:" << endl;
comp1.print();
comp2.print();
cout << "Kết quả phép trừ: ";
ComplexNum comp3 = comp1 - comp2;
comp3.print();
}
Kết quả đầu ra
Hai số phức: 15 + i(-2) 5 + i10 Kết quả phép trừ: 10 + i(-12)
Trong chương trình, lớp ComplexNum có biến real và imag cho phần thực và ảo. Constructor ComplexNum khởi tạo giá trị, có mặc định 0:
class ComplexNum {
private:
int real, imag;
public:
ComplexNum(int r = 0, int i = 0) {
real = r;
imag = i;
}
}
Hàm nạp chồng toán tử chứa từ khóa operator theo sau -. Hàm trừ hai số phức, kết quả lưu trong obj2, trả về đối tượng ComplexNum comp3:
ComplexNum operator - (ComplexNum const &obj1) {
ComplexNum obj2;
obj2.real = real - obj1.real;
obj2.imag = imag - obj1.imag;
return obj2;
}
Hàm print() in phần thực và ảo:
void print() {
if (imag >= 0)
cout << real << " + i" << imag << endl;
else
cout << real << " + i(" << imag << ")" << endl;
}