Home Giáo Trình OOP Chương 7 - TÁI ĐỊNH NGHĨA TÁC TỬ - Giáo trình lập trình hướng đối tượng (OOP) - Đại học Tây Đô March 07, 2023 >Bấm vào ĐÂY để tảiKey: Chương 7 TÁI ĐỊNH NGHĨA TÁC TỬ • 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 Giới thiệu • Tại sao cần tái định nghĩa tác tử? PhanSo(int=0, int=1){...} int LonHon (PhanSo x) { return (tu*x.mau>mau*x.tu);} PhanSo Cong(PhanSo x) {...} Ta cần có cách viết các phép toán theo dạng gần gũi hơn if ( b > a ) PhanSo a(4,9), b(3,7); cout<<“PS b lon hon a”; a.InPs(); cout<< “ + ”; b.InPs(); cout<< “ = ”; c.InPs(); Phan So c = b + a cout << a << “ + ” << b << “ = ” << c; – C++ cho phép ta tái định nghĩa các tác tử (phép – 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. 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 4 • Các tác tử có thể định nghĩa – Số học: +, -, *, /, ... Tăng giảm: ++, --, +=, *=, ... – So sánh: <, >, >=, <=, ==, != – <<, >>, [], new, delete, ... 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. friend PhanSo operator + (PhanSo,int); PhanSo operator + (PhanSo x, int n) { return PhanSo(x.tu + x.mau*n, x.mau);} PhanSo b = operator +(a,10); PhanSo d = 20 + a ; // Sai Phải định nghĩa thêm tác tử: PhanSo operator + (int , PhanSo); 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. PhanSo operator + (int); PhanSo PhanSo::operator + (int n) { return PhanSo(tu + mau*n, mau);} PhanSo b = a.operator +(10); PhanSo d = 20 + a ; // Sai Không thể định nghĩa thêm tác tử bằng hàm thành viên cho trường hợp này 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. int soluong, vitri; void operator=(const Stack& s){ soluong = s.soluong; void main() { Stack s1(100); ... Stack s2(20); ... s2 = s1; ... s1 = s2; } ds = new float[soluong]; for(int i=0; i>), xuất (<<) phải được định nghĩa theo dạng hàm độc lập và thường khai báo là friend. • Thao tác với các dòng (stream) xuất/nhập chuẩn như: – Bàn phím, tập tin dùng để đọc, ... (istream) – Màn hình, tập tin dùng để ghi, ... (ostream) friend ostream& operator << (ostream& os, PhanSo p); friend istream& operator >> (istream& is, PhanSo& p); Tái định nghĩa tác tử xuất – nhập friend ostream& operator << (ostream& os, Diem p); friend istream& operator >> (istream& is, Diem& p); ostream& operator << (ostream& os, Diem p) { os << “(” << p.x << “,” << p.y <<“)”; return os; } istream& operator >> (istream& is, Diem& p) { cout << “Nhap hoanh do: ”; is >> p.x; cout << “Nhap tung do: ”; is >> p.y; cout<< “Gia tri diem A la: ” << a <>b; cout<< “Gia tri diem B la: ” << b <> và Tái định nghĩa tác tử xuất – nhập #include char mssv[10], *hoten; friend ostream& operator << (ostream& os, SinhVien s) { friend istream& operator >> (istream& is, SinhVien& s){ is.getline(s.mssv,9); is.getline(s.hoten,49); void main() { SinhVien ptcang; cout<<“Nhap thong tin: ”; cin >> ptcang; cout << “Sinh vien A: ”; cout << ptcang ; ofstream f1(“MyFile.txt”); f1<>a1; cout << “Trong file: ”; cout <
Post a Comment