CHƯƠNG 13: TOÁN TTRÊ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 một trong các toán hạng tham gia phép
toán 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 ký hiệu toán tcầ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 tcó th 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 thnhất trong hàm toán tluôn
một đối tượng thuộc lớp đó. Nếu toán hạng thnhất trong hàm toán t
không phải một đối tượng của lớp thì hàm toán tử phải 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 tcộ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();
}