HỌC VIỆN KỸ THẬT QUÂN SỰ KHOA CÔNG NGHỆ THÔNG TIN ĐỀ CƯƠNG BÀI GIẢNG HỌC PHẦN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bộ môn: Công nghệ phần mềm Giáo viên: 1) Phạm Thị Bích Vân Bài IV: Nạpchồngtoántử Thời lượng: tiết (GV giảng: 3; tập: 3) Mục đích, yêu cầu: Giới thiệu sinh viên ý nghĩa, cách xây dựng nạpchồngtoántử Cách nạpchồngtoántử chèn dòng, trích dòng, toántử đặc biệt Nội dung: a) Nội dung chi tiết: • Giới thiệu • Trong chương tìm hiểu làm cho phép toántử C++ làm việc với đối tượng lớp Xử lý gọi nạpchồngtoántử (operator overloading) Các nguyên tắc nạpchồngtoántử − Lập trình viên sử dụng kiểu có sẵn định nghĩa kiểu − Các lập trình viên sử dụng toántử với kiểu người dùng định nghĩa − Các toántửnạpchồng cách viết định nghĩa hàm ngoại trừ tên hàm trở • thành từ khóa operator theo sau ký hiệu toántửnạpchồng Prototype có dạng sau: type operator operator_symbol ( parameter_list ); Các giới hạn − Phần lớn toántử C++ nạpchồng Các toántửnạp chồng: − Các toántửnạp chồng: − Không thể thay đổi số toán hạng mà toántử yêu cầu: Nạpchồngtoántử • toántử ngôi; nạpchồngtoántử hai toántử hai Nạpchồngtoántử − Các toántử hai nạpchồng hình sau: Bộ môn Công nghệ phần mềm − Một toántử hai nạpchồng hàm thành viên không tĩnh với tham số • hàm không thành viên với hai tham số Nạpchồngtoántử − Các toántửnạpchồng hình sau: − Một toántử lớp nạpchồng hàm thành viên không tĩnh với • tham số hàm không thành viên với tham số; Tham số phải đối tượng lớp tham chiếu đến đối tượng lớp Nạpchồngtoántử đặc biệt • Toántử [] − Khi cài đặt lớp vector chuỗi ký tự, cần phải truy cập đến phần tử chúng, − ngôn ngữ C/C++ có toántử [] để truy cập đến phần tử mảng Đây toántử hai ngôi, có dạng a[b] nạpchồngtoántử hàm toántử tương ứng • phải thành viên lớp Toántử () − Toántử () dùng để gọi hàm, toántử gồm hai toán hạng: toán hạng tên hàm, − toán hạng thứ hai danh sách tham số hàm Toántử có dạng giống toántử [] nạpchồngtoántử hàm toántử tương • ứng phải thành viên lớp Nạpchồngtoántử chuyển đổi kiểu − Một toántử chuyển đổi kiểu sử dụng để chuyển đổi đối tượng lớp − thành đối tượng lớp khác thành đối tượng kiểu có sẵn Toántử chuyển đổi kiểu phải hàm thành viên không tĩnh không hàm friend Prototype hàm thành viên có cú pháp: • operator (); Nạpchồngtoántử new delete − Hàm toántửtoántử new delete có prototype sau: Bộ môn Công nghệ phần mềm • void * operator new(size_t size); void operator delete(void * ptr); Trong tham số kiểu size_t trình biên dịch hiểu kích thước kiểu liệu trao cho toántử new Nạpchồngtoántử chèn dòng − Ta nạpchồngtoántử chèn dòng > (stream − extraction) Hàm toántửtoántử trả tham chiếu đến dòng xuất istream Tham số thứ hàm toántử >> tham chiếu đến dòng xuất istream, tham số thứ hai đối tượng Một số ví dụ • Lớp String Xây dựng lớp xử lý việc tạo thao tác chuỗi (string) C++ không cài sẵn kiểu liệu chuỗi Nhưng C++ cho phép thêm kiểu chuỗi lớp thông qua chế nạpchồng class String { private: char *Ptr; //Con tro tro den diem bat dau cua chuoi int Length; //Chieu dai chuoi public: String(const char * = ""); //Constructor chuyen doi String(const String &); //Constructor chep ~String(); //Destructor const String &operator=(const String &); //Phep gan String &operator+=(const String &); //Phep noi int operator!() const; //Kiem tra chuoi rong int operator==(const String &) const; int operator!=(const String &) const; int operator(const String &) const; int operator>=(const String &) const; int operator