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 đủ
pdf 49 trang baolam 20000 Free
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:

  • pdfbai_giang_phuong_phap_lap_trinh_huong_doi_tuong_tuan_04_toan.pdf