
CHƯƠNG 13: TOÁN TỬ TRÊN LỚP
• Nội dung
Toán tử
Hàm toán tử
Định nghĩa chồng toán tử gán “=“
Định nghĩa chồng toán tử tăng/giảm ”++“/”—”
Định nghĩa chồng toán tử “[]”
Định nghĩa chồng toán tử “<<” và “>>”

Toán tử
Trong C++, có thể định nghĩa chồng đối với hầu hết các toán tử (một ngôi
hoặc hai ngôi) trên các lớp, nghĩa là một trong các toán hạng tham gia phép
toán là các đối tượng.
Toán tử được định nghĩa chồng bằng cách định nghĩa một hàm toán tử với
tên bao gồm từ khóa operator và theo sau là ký hiệu toán tử cần định nghĩa
chồng.
•Ví dụ 1: Một số ví dụ về tên hàm toán tử
• operator+ định nghĩa phép cộng
• operator- định nghĩa phép trừ
• operator* định nghĩa phép nhân
• operator/ định nghĩa phép chia
• operator+= định nghĩa phép cộng bằng
• operator!= định nghĩa phép so sánh khác

Hàm toán tử
• Hàm toán tử có thể là hàm thành phần hoặc hàm bạn của lớp. Khi hàm toán
tử là hàm thành phần của lớp thì toán hạng thứ nhất trong hàm toán tử luôn
là một đối tượng thuộc lớp đó. Nếu toán hạng thứ nhất trong hàm toán tử
không phải là một đối tượng của lớp thì hàm toán tử phải là hàm bạn của
lớp.
•Ví dụ 2:
• class SoPhuc
• {
• private:
• float re, im; //phần thực và phần ảo
• public:
• SoPhuc(float re = 0; float im = 0); void Xuat();
• //Hàm toán tử cộng hai đối tượng Sophuc
• SoPhuc operator+(SoPhuc u); // Hàm thành phần lớp
• /*Hàm toán tử cộng một số thực với phần thực của một đối tượng
SoPhuc*/
• friend SoPhuc operator+(float x, SoPhuc v); //Hàm bạn
• };

• //Định nghĩa các hàm thành phần
• SoPhuc::SoPhuc(float im1, float re1)
• {
• im = im1; re = re1;
• }
• SoPhuc SoPhuc::oprator+(SoPhuc u)
• {
• cout << “Goi hàm toán tử thành phần operator+\n”;
• SoPhuc res(re + u.re, im + u.im); //Gọi hàm thiết lập hai đối số
• return res;
• }
• void SoPhuc::Xuat()
• {
• cout << re << (im >= 0 ? “+” : “-”) << fabs(im) << “*i\n”;
• }

• //Định nghĩa hàm tự do
• SoPhuc operator+(float x, SoPhuc u)
• { cout << “Goi hàm toán tử tự do operator+\n”;
• SoPhuc res(x + u.re, u.im);
• return res;
• }
• //Hàm chính
• void main()
• { SoPhuc a(-2, 4);
• a.Xuat();
SoPhuc b(8, -6);
• b.Xuat();
• SoPhuc c = a + b; // CT dịch hiểu c = a.operator+(b)
• c.Xuat();
• SoPhuc d = 4 + c; // CT dịch hiểu c = operator+(4, c)
• d.Xuat();
• SoPhuc e = a + b + c; // e = (a.operator+(b)).operator+(c)
• e.Xuat();
• }

