You are on page 1of 14

LOGO

CHƯƠNG 3
CHỒNG HÀM,
CHỒNG TOÁN TỬ
Toán tử tải bội
 Nạp chồng toán tử một ngôi
 Dùng hàm toán tử toàn cục với một tham số
 Phương thức không có tham số trong 1 lớp
 Cú pháp:
<kiểu trả về> operator <toán tử>(<kiểu> <tham số>) {...}
Hoặc:
class <tên lớp> {
<kiểu trả về> operator <toán tử>() [const] {...}
};

www.themegallery.com
Toán tử tải bội
 Ví dụ:
Vector operator -(const Vector& v)
{
return Vector(-v.x, -v.y, -v.z);
}
Hoặc:
class Vector {
public:
Vector operator -() const
// tham số chính là *this
{ return Vector(-x, -y, -z);
}
}; www.themegallery.com
Toán tử tải bội
 Các hàm toán tử nếu khai báo ngoài lớp thường được
khai báo là friend để sử dụng các biến ẩn
 Ví dụ:
class Vector {
public:
friend Vector operator -(const Vector& v);
};
Vector operator -(const Vector& v)
{ return Vector(-v.x, -v.y, -v.z); }

www.themegallery.com
Toán tử tải bội
 Khi sử dụng toán tử:
Vector v1(1.2, 2.3, 4.5), v2;
v2 = -v1;
 Có thể gọi tường minh các hàm toán tử:
v2 = operator –(v1); // hàm toán tử ngoài
lớp
hoặc:
v2 = v1.operator –(); // hàm toán tử trong lớp

www.themegallery.com
Toán tử tải bội
 Khi xây dựng toán tử ++/--:
 Hai toán tử này có thể dùng ở trước (tiền tố) hoặc
sau (hậu tố).
• Nếu là tiền tố (++x) thì hàm toán tử không cần tham
số, nó trả về kết là tham chiếu đến đối tượng của lớp
• Nếu là hậu tố (x++) thì hàm phải có tham số thứ 2 là
int (dù không dùng), nó trả về kết quả là đối tượng
thuộc lớp.

www.themegallery.com
Toán tử tải bội
 Ví dụ định nghĩa trong lớp:
class LimitedNum {
private:
int n, lim;
public:
LimitedNum& operator ++() { // tiền tố
if (++n > lim)
n = lim;
return *this;
}
LimitedNum& operator ++(int) { // hậu tố
return ++(*this); }
};
www.themegallery.com
Toán tử tải bội
 Nạp chồng các toán tử quan hệ
 Các toán tử quan hệ: <, >, ==, >=, <=
 Cú pháp:
bool operator <toán tử>(<kiểu_dữ liệu tham số>)
<kiểu dữ liệu> có thể là: const
Ví dụ:
bool operator==(PS& ps1, PS& ps2)
{
return (ps1.tu * ps2.mau == ps1.mau *
ps2.tu);
}

www.themegallery.com
Bài tập
Bài 1.
a. Xây dựng lớp phân số PS. Dữ liệu thành phần bao gồm
tu,mau. Các hàm thành phần bao gồm:
- Hàm tạo
- Hàm nhập dữ liệu
- Hàm hiển thị phân số
b. Định nghĩa các phép toán tải bội: +,-,*,/,==,<,>,++,-- và in
kết quả các phép toán ra màn hình.
Tất cả kết quả đều phải tối giản

www.themegallery.com
BÀI TẬP
Bài 2:
Xây dựng lớp Vecto để mô tả các đối tượng vector
trong không gian n chiều và thực hiện: nhập tọa độ, xuất tọa
độ, chồng toán tử +, - (cộng, trừ hai vector), * (nhân vô hướng
hai vector.
Viết chương trình nhập vào 2 vecto, xuất tọa độ của 2
vecto và hiển thị kết quả của các phép toán + , -, * 2 vecto vừa
nhập.

www.themegallery.com
BÀI TẬP
Bài 3:
Xây dựng lớp Timer gồm thuộc tính: hour, minute,
second và các phương thức:
- Timer() khởi tạo dữ liệu cho đối tượng.
- Settime() dùng để thiết lập dữ liệu cho đối tượng.
- Nhập dữ liệu
- Kiểm tra tính hợp lệ của dữ liệu nhập vào: 0<=
hour <= 24; 0<= minute <= 60; 0<= second <= 60;
- In() để hiển thị dưới dạng giờ:phút:giây AM hoặc PM.

www.themegallery.com
BÀI TẬP
Bài 3:
Định nghĩa một số toán tử
>, <,== : So sánh lớn hơn, nhỏ hơn, bằng nhau của 2
đối tượng Timer
++: Tăng giây lên 1
--: Giảm giây xuống 1
Viết chương trình thực hiện:
- Nhập và hiển thị n đối tượng Timer, n nhập từ bàn phím.
- Hiển thị danh sách n đối tượng Timer khi thực hiện phép
toán ++, --
- Hiển thị danh sách n Timer theo chiều giảm dần.

www.themegallery.com
Bai tap
Bài 4:
Xây dựng lớp String gồm thuộc tính s (kiểu
string), và định nghĩa một số toán tử sau:
+ : Dùng để ghép 2 xâu thành một xâu
-: Xóa từ cuối cùng giống nhau ở 2 xâu. Nếu không
có từ giống nhau ở cuối thì kết quả là -1.
Ví dụ: xâu s1là “hoa hong”, s2 là “mau hong” thì
phép toán s1-s2 = “hoa”, s2-s1=“mau”.
>: xâu s1>s2 nếu s1 có số lượng từ nhiều hơn s2
<: xâu s1<s2 nếu s1 có số lượng từ ít hơn s2
==: xâu s1== s2 nếu s1,s2 có số lượng từ bằng nhau
www.themegallery.com
Bai tap
Hãy thiết kế các phương thức phù hợp khác để
thực hiện một số công việc sau:
- Nhập vào n String.
-Hiển thị kết quả của phép toán +,- hai String đầu
tiên.
-Hiển thị danh sách String được sắp xếp theo chiều
tăng dần của số lượng từ.
-Hiển thị danh sách String có chứa từ “hoc” theo
chiều giảm dần của số lượng từ.

www.themegallery.com

You might also like