Bài giảng Phương pháp lập trình hướng đối tượng - Tuần 04: Toán tử, 3 vấn đề con trỏ - Phạm Tú San
Tuần 04:
Toán tꢀ, 3 vꢁn đꢂ con trꢃ
TOÁN TỬ
Hàm toán tꢀ
Toán tử à một loại phương thức đặc biệt của
lớp
PhanSo a(3,2), b(4,5), c;
c = a.Cong(b);
c = a + b;
Trong C++, dùng từ khóa operator.
PhanSo operator +(const PhanSo &p1, const PhanSo &p2);
PhanSo p1, p2;
PhanSo p3 = p1 + p2;
Có thể nạp chồng hàm cho toán tử
PhanSo operator +(const PhanSo &p, int iNumber);
float opeartor +(const PhanSo &p, float iNumber);
Hàm toán tꢀ
Phân loại hàm toán tử:
Toán tử độc lập:
Không thuộc lớp nào.
Ngôi của toán tử là số tham số truyền vào.
PhanSo operator +(const PhanSo &p1, const PhanSo &p2);
bool operator >(const PhanSo &p1, const PhanSo &p2);
Toán tử thuộc lớp:
Là phương thức của lớp.
Ngôi của toán tử: đối tượng của lớp + số tham số.
PhanSo PhanSo::operator +(const PhanSo &p);
bool PhanSo::operator >(const PhanSo &p);
Cách sử dụng 2 loại là như nhau!!
4
Các toán tꢀ có thꢄ viꢅt chꢆng
+
|
ꢋ
*
!
/ % ^ &
= < > +=
~
ꢋ= *= /= %= ^= &= |=
<< >> >>= <<= == != <=
>= && || ++ ꢋꢋ ꢋ>* ,
delete[]
new[] delete
ꢋ> [] () new
Các toán tꢀ :: hay . hay .* không đưꢇc phép đꢈnh nghĩa
bꢉi ngưꢊi dùng
Toán tꢀ: sizeof, typeid, ?: không đưꢇc đꢈnh nghĩa chꢆng
Toán tꢀ =, ꢋ>, [], () chꢌ đưꢇc viꢅt chꢆng bꢍng các hàm nonꢋ
static
Cú pháp chung
<kiểu trả về> operator <toán tử> (danh sánh tham số)
Ví dụ:
bool HoTen::operator==(const HoTen& rhs)
{
return((sTen==rhs.sTen) && (sHo==rhs.sHo));
}
Cách sꢀ dꢎng
int main()
{
SinhVien sv1, sv2;
if (sv1 == sv2) //sv1.operator==(sv2)
{
...
}
...
}
Mꢏt sꢐ lưu ý khi viꢅt chꢆng toán tꢀ
Tránh thay đổi ý nghĩa nguyên thủy của toán
tử đó
Các cặp toán tử có cùng chức năng, ví dụ x=x+y
và x+=y phải được viết cùng nhau và có cùng
chức năng.
Nếu toán tử chồng không là hàm thành viên
của lớp thì nên sử dụng từ khóa friend thay vì
truy xuất đến các thành phần dữ liệu 1 cách
phức tạp
Toán tꢀ không thuꢏc lꢑp
Ví dụ: toán tử nhập xuất
friend ostream& operator<<(ostream &out, const PhanSo &src);
ostream& operator<<(ostream &out, const PhanSo &src)
{
out<<src.tu<<“//”<<src.mau;
}
Toán tꢀ gán bꢍng
Tương tự như hàm dựng sao chép, nếu mỗi lớp
đối tượng không có toán tử gán bằng thì trình
biên dịch sẽ tạo 1 hàm toán tử gán bằng mặc
định
Hàm này cũng có chức năng tương tự như hàm
dựng sao chép mặc định: sao chép từng bit của
đối tượng nguồn cho đối tượng đích.
Toán tꢀ gán bꢍng
Do vậy, nếu lớp đối tượng có biến con trỏ và có
nhu cầu gán bằng 1 đối tượng khác.
ꢀ cần xây dựng toán tử gán bằng cho lớp
Lưu ý: toán tử gán bằng khác hàm dựng sao
chép 1 số điểm sau:
Xóa phần bộ nhớ nó đang kiểm soát trước khi gán
bằng đối tượng mới.
Kiểm tra kỹ việc đối tượng tự gán bằng chính nó.
Toán tꢀ gán bꢍng
Đối tượng đích
Đối tượng nguồn
ptr
ptr
• Xóa bỏ vùng nhớ nó đang kiểm soát
• Copy vùng nhớ và trỏ quả vùng nhớ mới
Ví dꢎ ꢋ toán tꢀ gán bꢍng
HocSinh& HocSinh::operator=(const HocSinh& h)
{
if (this != &h)
{
delete [] thisꢀ>HoTen;
int size = h.HoTen.length();
thisꢀ>HoTen = new char[size];
strcpy(thisꢀ>HoTen, h.HoTen);
}
return *this;
}
3 vꢁn đꢂ con trꢃ
Bộ 3 hàm sau luôn đi chung với nhau:
Hàm dựng sao chép (copy constructor)
Toán tử gán bằng (assignment operator)
Hàm hủy (destructor)
Hàm dꢒng sao chép – hàm hꢓy
HocSinh::HocSinh(const HocSinh& h)
{
if(h.HoTen != null)
{
int size = h.HoTen.length();
thisꢀ>HoTen = new char[size];
strcpy(thisꢀ>HoTen, h.HoTen);
}
}
HocSinh::~HocSinh()
{
if(thisꢀ>HoTen != null)
{
delete []thisꢀ>HoTen;
thisꢀ>HoTen = null;
}
}
BÀI TẬP
Bài tꢔp – 4.1
Xây dựng các toán tử sau cho lớp Phân Số
Toán tử +, ꢀ, *, / , >, <, >=, <=,
Toán tử ++, -- theo dạng tiền tố và hậu tố (++x và x++)
Toán tử ép kiểu (int), (float)
Toán tử nhập, xuất
Giả sử ta có phân số: PhanSo x
Cần xử lý một số vấn đề sau:
Tính: x + 5
Tính giao hoán của phép cộng: 5 + x
Thꢁo luꢂn ñꢃ tìm ra giꢁi pháp?
Bài tꢔp – 4.2
Đối tượng “mảng số nguyên” có 2 thuộc tính là
mảng động chứa các đối tượng Số Nguyên và số
phần tử hiện có trong mảng.
Xây dựng các phương thức giải quyết 3 vấn đề
về con trỏ cho mảng
class MangSoNguyen
{
private:
int *GiaTri;
int SoPhanTu;
};
Tham khꢕo
Slide PPLTHĐT của
Thầy Nguyễn Minh Huy
Thầy Đinh Bá Tiến
Tuần 04:
Mꢀt sꢁ vꢂn đꢃ khác
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phương pháp lập trình hướng đối tượng - Tuần 04: Toán tử, 3 vấn đề con trỏ - Phạm Tú San", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_phuong_phap_lap_trinh_huong_doi_tuong_tuan_04_toan.pdf

