Professional Documents
Culture Documents
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