Bài giảng Lập trình hướng đối tượng C++ - Chương 8: Tái định nghĩa (OverLoading)

Tái định nghĩa hàm.

Tái định nghĩa toán tử.

Chuyển đổi kiểu.

Tái định nghĩa toán tử xuất (<<)– nhập (>>)

Tái định nghĩa toán tử [], toán tử ()

Khởi tạo ngầm định - Gán ngầm định.

Tái định nghĩa toán tử ++ và --

Tái định nghĩa new và delete

 

ppt18 trang | Chuyên mục: C/C++ | Chia sẻ: tuando | Lượt xem: 456 | Lượt tải: 2download
Tóm tắt nội dung Bài giảng Lập trình hướng đối tượng C++ - Chương 8: Tái định nghĩa (OverLoading), để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
TÁI ĐỊNH NGHĨACHƯƠNG 8:(OVERLOADING)Bộ môn Hệ Thống Máy Tính và Truyền ThôngKhoa Công Nghệ Thông Tin và Truyền ThôngĐại học Cần Thơ 1Khoa Công Nghệ Thông Tin - Đại Học Cần ThơNội dungTái định nghĩa hàm.Tái định nghĩa toán tử.Chuyển đổi kiểu.Tái định nghĩa toán tử xuất (>)Tái định nghĩa toán tử [], toán tử ()Khởi tạo ngầm định - Gán ngầm định.Tái định nghĩa toán tử ++ và --Tái định nghĩa new và deleteChương 82Khoa Công Nghệ Thông Tin - Đại Học Cần ThơTái định nghĩa hàmĐịnh nghĩa các hàm cùng tênĐối số phải khác nhau:class Time { //... long GetTime (void); // số giây tính từ nửa đêm void GetTime (int &hours, int &minutes, int &seconds);}; Số lượng Thứ tự KiểuCó thể dùng đối số mặc định.void main() { int h, m, s; long t = GetTime(); // Gọi hàm ??? GetTime(h, m, s); // Gọi hàm ???}Chương 83Khoa Công Nghệ Thông Tin - Đại Học Cần ThơTái định nghĩa toán tửĐịnh nghĩa các phép toán trên đối tượng.Các phép toán có thể tái định nghĩa:Đơn hạng+-*!~&++--()->->*newdeleteNhị hạng+-*/%&|^>=+=-=/=%=&=|=^=>===!==&&||[](),Các phép toán không thể tái định nghĩa:	.	.*	::	?:	sizeof Chương 84Khoa Công Nghệ Thông Tin - Đại Học Cần ThơTái định nghĩa toán tử (tt)Bằng hàm thành viên:class Point { public:	Point (int x, int y)	 { Point::x = x; Point::y = y; }	Point operator + (Point &p)	{ return Point(x + p.x,y + p.y); }	Point operator - (Point &p)	{ return Point(x - p.x, y - p.y); } private:	int x, y;};void main() { Point p1(10,20), p2(10,20); Point p3 = p1 + p2; Point p4 = p1 - p2; Point p5 = p3.operator + (p4); Point p6 = p3.operator – (p4);};Có 1 tham số(Nếu là toán tử nhị hạng)Chương 85Khoa Công Nghệ Thông Tin - Đại Học Cần ThơTái định nghĩa toán tử (tt)Bằng hàm độc lập: thường khai báo friendclass Point { public:	Point (int x, int y)	 { Point::x = x; Point::y = y; }	friend Point operator + (Point &p, Point &q)	{return Point(p.x + q.x,p.y + q.y); }	friend Point operator - (Point &p, Point &q) 	{return Point(p.x - q.x,p.y - q.y); } private:	int x, y;};void main() { Point p1(10,20), p2(10,20); Point p3 = p1 + p2; Point p4 = p1 - p2; Point p5 =operator + (p3, p4); Point p6 = operator – (p3, p4);};Có 2 tham số(Nếu là toán tử nhị hạng)Chương 86Khoa Công Nghệ Thông Tin - Đại Học Cần ThơTái định nghĩa toán tử (tt)Cải tiến lớp tập hợp (Set):#include const	maxCard = 100;enum	Bool {false, true};class Set { public: Set(void) { card = 0; } friend Bool operator & (const int, Set&);// thanh vien ? friend Bool operator == (Set&, Set&); // bang ? friend Bool operator != (Set&, Set&); // khong bang ? friend Set operator * (Set&, Set&); // giao friend Set operator + (Set&, Set&); // hop //... void AddElem(const int elem); void Copy (Set &set); void Print (void); private: int elems[maxCard]; int card;	}; // Định nghĩa các toán tử..int main (void){ Set	s1, s2, s3; s1.AddElem(10); s1.AddElem(20); s1.AddElem(30); s1.AddElem(40); s2.AddElem(30); s2.AddElem(50); s2.AddElem(10); s2.AddElem(60); cout >Định nghĩa hàm toàn cục:istream& operator >> (istream&, Class&);class Point { public: Point (int x=0, int y=0)	 { Point::x = x; Point::y = y; } friend istream& operator >> (istream& is, Point& p) { cout>p.x;	 cout>p.y; } // .. private: int x, y;};void main() { Point p1, p2; cout>p1; cout>p2; }Chương 811Khoa Công Nghệ Thông Tin - Đại Học Cần ThơTái định nghĩa toán tử [ ]Thông thường để xuất ra giá trị của 1 phần tử tại vị trí cho trước trong đối tượng.Định nghĩa là hàm thành viên.class StringVec { public:	StringVec (const int dim);	~StringVec ();	char* operator [] (int);	int add(char* );	// .. private:	char **elems; // cac phan tu 	int dim; // kich thuoc cua vecto	int used; // vi tri hien tai }; char* StringVec::operator [] (int i) { if ( i>=0 && i= 1 && row = 1 && col chậm. Không đáng kể khi đối tượng có kích thước lớn.	=> Toán tử new và delete ít được tái định nghĩa.Định nghĩa theo dạng hàm thành viên:class Point { public: //... void* operator new (size_t bytes); void operator delete (void *ptr, size_t bytes); private: int xVal, yVal;};void main() { Point *p = new Point(10,20); Point *ds = new Point[30]; // delete p; delete []ds;}Chương 818Khoa Công Nghệ Thông Tin - Đại Học Cần Thơ

File đính kèm:

  • pptbai_giang_lap_trinh_huong_doi_tuong_c_chuong_8_tai_dinh_nghi.ppt