Bài giảng Lập trình hướng đối tượng C++ - Chương 7: Tái định nghĩa tác tử
Số trang: 12
Loại file: pdf
Dung lượng: 584.16 KB
Lượt xem: 8
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng Lập trình hướng đối tượng C++ - Chương 7: Tái định nghĩa tác tử cung cấp cho người học những kiến thức như: Giới thiệu; Tái định nghĩa bằng hàm độc lập; Tái định nghĩa bằng hàm thành viên; Tái định nghĩa phép gán (dấu =); Tái định nghĩa tác tử xuất – nhập. Mời các bạn cùng tham khảo!
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình hướng đối tượng C++ - Chương 7: Tái định nghĩa tác tử Chương 7TÁI ĐỊNH NGHĨA TÁC TỬ 1Nội dung • Giới thiệu • Tái định nghĩa bằng hàm độc lập • Tái định nghĩa bằng hàm thành viên • Tái định nghĩa phép gán (dấu =) • Tái định nghĩa tác tử xuất – nhập 2Giới thiệu • Tại sao cần tái định nghĩa tác tử? class PhanSo { int tu, mau; Ta cần có cách public: viết các phép PhanSo(int=0, int=1){…} toán theo dạng void InPs() {…} int LonHon (PhanSo x) { gần gũi hơn return (tu*x.mau>mau*x.tu);} PhanSo Cong(PhanSo x) {…} };void main() { if ( b > a ) PhanSo a(4,9), b(3,7); if(b.LonHon(a)) Phan So c = b + a coutGiới thiệu (tt)• Cơ chế – C++ cho phép ta tái định nghĩa các tác tử (phép toán). – Việc tái định nghĩa tác tử thực hiện tương tự như tái định nghĩa hàm. – Cú pháp: operator ( các đối số ) – Có 2 cách dùng để tái định nghĩa tác tử: • Dùng hàm độc lập • Dùng hàm thành viên 4Giới thiệu (tt)• Các tác tử có thể định nghĩa – Số học: +, -, *, /, … Tăng giảm: ++, --, +=, *=, … – So sánh: , >=, Tái định nghĩa bằng hàm độc lập• Thông thường nên khai báo hàm độc lập là hàm bạn của lớp để có thể truy cập các thành phần private của lớp.• Tác tử sau khi định nghĩa không có tính giao hoán. class PhanSo { int tu,mau; public: ... friend PhanSo operator + (PhanSo,int);};PhanSo operator + (PhanSo x, int n) { return PhanSo(x.tu + x.mau*n, x.mau);}void main() { PhanSo a(2,5); PhanSo b = operator +(a,10); PhanSo c = a + 20 ; PhanSo d = 20 + a ; 6 }Tái định nghĩa bằng hàm thành viên• Đối số đầu tiên của tác tử chính là đối tượng đang xét.=> Hàm sẽ có số lượng đối số ít hơn so với hàm độc lập. class PhanSo { int tu,mau; public: ... PhanSo operator + (int);};PhanSo PhanSo::operator + (int n) { return PhanSo(tu + mau*n, mau);}void main() { Không thể định nghĩa thêm PhanSo a(2,5); tác tử bằng hàm thành PhanSo b = a.operator +(10); viên PhanSo c = a + 20 ; PhanSo d = 20 + a ; // Sai cho trường hợp này 7 }Tái định nghĩa phép gán (dấu =)• C++ mặc nhiên sẽ có phép gán (dấu = ) bằng cách gán tương ứng từng thuộc tính giữa 2 đối tượng.• Khi thành phần dữ liệu có con trỏ => phải định nghĩa “=”.• Phép gán phải định nghĩa bằng hàm thành viên.class Stack { void main() { float *ds; Stack s1(100); int soluong, vitri; … public: Stack s2(20); ... … void operator=(const Stack& s){ s2 = s1; soluong = s.soluong; … vitri = s.vitri; s1 = s2; delete[] ds; } ds = new float[soluong]; for(int i=0; iTái định nghĩa phép gán (dấu =)• Phân biệt giữa phép gán và hàm xây dựng sao chép: – Phép gán: đối tượng đã tồn tại (có vùng nhớ) – Hàm xây dựng sao chép: đối tượng chưa có• Trị trả về của phép gán có thể là chính đối tượng đó.class SinhVien { void main(){ char mssv[9]; char* hoten; SinhVien a, b, c; int namsinh; float diemtb; a.Nhap(); public: c = b = a; //phép gán ... SinhVien& operator=(const SinhVien d=a; // hxdsc SinhVien& a){ } strcpy(mssv,a.mssv); Phải copy dữ liệu delete[] hoten; hoten = strdup(a.hoten); namsinh = a.namsinh; Xóa vùng nhớ cũ, cấp vùng diemtb = a.diemtb; nhớ mới và copy dữ liệu return *this; } 9};Tái định nghĩa tác tử xuất – nhập• Dùng để xuất nhập trực tiếp đối tượng qua cin, cout: VD: PhanSo a(2,5); cout ), xuất (Tái định nghĩa tác tử xuất – nhập• class Ví dụDiem 1 { int x, y; public : … friend ostream& operator > (istream& is, Diem& p); }; ostream& operator Tái định nghĩa tác tử xuất – nhập• Ví dụ 2class SinhVien { #include char mssv[10], *hoten; float diemtb; public : void main() { … SinhVien ptcang; friend ostream& operator ...
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình hướng đối tượng C++ - Chương 7: Tái định nghĩa tác tử Chương 7TÁI ĐỊNH NGHĨA TÁC TỬ 1Nội dung • Giới thiệu • Tái định nghĩa bằng hàm độc lập • Tái định nghĩa bằng hàm thành viên • Tái định nghĩa phép gán (dấu =) • Tái định nghĩa tác tử xuất – nhập 2Giới thiệu • Tại sao cần tái định nghĩa tác tử? class PhanSo { int tu, mau; Ta cần có cách public: viết các phép PhanSo(int=0, int=1){…} toán theo dạng void InPs() {…} int LonHon (PhanSo x) { gần gũi hơn return (tu*x.mau>mau*x.tu);} PhanSo Cong(PhanSo x) {…} };void main() { if ( b > a ) PhanSo a(4,9), b(3,7); if(b.LonHon(a)) Phan So c = b + a coutGiới thiệu (tt)• Cơ chế – C++ cho phép ta tái định nghĩa các tác tử (phép toán). – Việc tái định nghĩa tác tử thực hiện tương tự như tái định nghĩa hàm. – Cú pháp: operator ( các đối số ) – Có 2 cách dùng để tái định nghĩa tác tử: • Dùng hàm độc lập • Dùng hàm thành viên 4Giới thiệu (tt)• Các tác tử có thể định nghĩa – Số học: +, -, *, /, … Tăng giảm: ++, --, +=, *=, … – So sánh: , >=, Tái định nghĩa bằng hàm độc lập• Thông thường nên khai báo hàm độc lập là hàm bạn của lớp để có thể truy cập các thành phần private của lớp.• Tác tử sau khi định nghĩa không có tính giao hoán. class PhanSo { int tu,mau; public: ... friend PhanSo operator + (PhanSo,int);};PhanSo operator + (PhanSo x, int n) { return PhanSo(x.tu + x.mau*n, x.mau);}void main() { PhanSo a(2,5); PhanSo b = operator +(a,10); PhanSo c = a + 20 ; PhanSo d = 20 + a ; 6 }Tái định nghĩa bằng hàm thành viên• Đối số đầu tiên của tác tử chính là đối tượng đang xét.=> Hàm sẽ có số lượng đối số ít hơn so với hàm độc lập. class PhanSo { int tu,mau; public: ... PhanSo operator + (int);};PhanSo PhanSo::operator + (int n) { return PhanSo(tu + mau*n, mau);}void main() { Không thể định nghĩa thêm PhanSo a(2,5); tác tử bằng hàm thành PhanSo b = a.operator +(10); viên PhanSo c = a + 20 ; PhanSo d = 20 + a ; // Sai cho trường hợp này 7 }Tái định nghĩa phép gán (dấu =)• C++ mặc nhiên sẽ có phép gán (dấu = ) bằng cách gán tương ứng từng thuộc tính giữa 2 đối tượng.• Khi thành phần dữ liệu có con trỏ => phải định nghĩa “=”.• Phép gán phải định nghĩa bằng hàm thành viên.class Stack { void main() { float *ds; Stack s1(100); int soluong, vitri; … public: Stack s2(20); ... … void operator=(const Stack& s){ s2 = s1; soluong = s.soluong; … vitri = s.vitri; s1 = s2; delete[] ds; } ds = new float[soluong]; for(int i=0; iTái định nghĩa phép gán (dấu =)• Phân biệt giữa phép gán và hàm xây dựng sao chép: – Phép gán: đối tượng đã tồn tại (có vùng nhớ) – Hàm xây dựng sao chép: đối tượng chưa có• Trị trả về của phép gán có thể là chính đối tượng đó.class SinhVien { void main(){ char mssv[9]; char* hoten; SinhVien a, b, c; int namsinh; float diemtb; a.Nhap(); public: c = b = a; //phép gán ... SinhVien& operator=(const SinhVien d=a; // hxdsc SinhVien& a){ } strcpy(mssv,a.mssv); Phải copy dữ liệu delete[] hoten; hoten = strdup(a.hoten); namsinh = a.namsinh; Xóa vùng nhớ cũ, cấp vùng diemtb = a.diemtb; nhớ mới và copy dữ liệu return *this; } 9};Tái định nghĩa tác tử xuất – nhập• Dùng để xuất nhập trực tiếp đối tượng qua cin, cout: VD: PhanSo a(2,5); cout ), xuất (Tái định nghĩa tác tử xuất – nhập• class Ví dụDiem 1 { int x, y; public : … friend ostream& operator > (istream& is, Diem& p); }; ostream& operator Tái định nghĩa tác tử xuất – nhập• Ví dụ 2class SinhVien { #include char mssv[10], *hoten; float diemtb; public : void main() { … SinhVien ptcang; friend ostream& operator ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Lập trình hướng đối tượng C++ Lập trình hướng đối tượng C++ Tái định nghĩa tác tử Tái định nghĩa phép gán Hàm độc lập Tái định nghĩa tác tử xuất nhậpGợi ý tài liệu liên quan:
-
Chapter 5: MẢNG - CON TRỎ THAM CHIẾU
10 trang 16 0 0 -
Bài giảng Lập trình hướng đối tượng C++ - Chương mở đầu: Giới thiệu tổng quan
15 trang 14 0 0 -
Bài giảng Kỹ thuật lập trình: Chương 6 - Trần Quang Hải Bằng
3 trang 14 0 0 -
Giáo trình Lập trình hướng đối tượng và C++ - Phạm Văn Ất (Chủ biên)
337 trang 13 0 0 -
Bài giảng Lập trình hướng đối tượng C++ - Chương 4: Hàm
8 trang 13 0 0 -
8 trang 13 0 0
-
Bài giảng Lập trình hướng đối tượng C++ - Chương 6: Hàm bạn và lớp bạn
9 trang 11 0 0 -
Bài giảng Lập trình hướng đối tượng C++ - Chương 8: Thừa kế
20 trang 10 0 0 -
Bài giảng Lập trình hướng đối tượng C++ - Chương 3: Lớp và đối tượng
20 trang 10 0 0 -
Bài giảng Lập trình hướng đối tượng C++ - Chương 1: Các đặc điểm của C++
45 trang 10 0 0