Danh mục

Chapter 8 - Operator Overloading

Số trang: 80      Loại file: pdf      Dung lượng: 309.62 KB      Lượt xem: 10      Lượt tải: 0    
Thu Hiền

Xem trước 8 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Sử dụng các toán tử với các đối tượng (operatoroverloading)– đối với một số lớp, sử dụng toán tử trong sáng hơn sử dụng các lờigọi hàmobject2 = object1.add(object2);object2 = object2 + object1;
Nội dung trích xuất từ tài liệu:
Chapter 8 - Operator Overloading 1 Chapter 8 - Operator Overloading Outline 8.1 Introduction 8.2 Fundamentals of Operator Overloading 8.3 Restrictions on Operator Overloading 8.4 Operator Functions as Class Members vs. as friend Functions 8.5 Overloading Stream-Insertion and Stream-Extraction Operators 8.6 Overloading Unary Operators 8.7 Overloading Binary Operators 8.8 Case Study: Array Class 8.9 Converting between Types 8.10 Case Study: A String Class 8.11 Overloading ++ and -- 8.12 Case Study: A Date Class 8.13 Standard Library Classes string and vector© 2003 Prentice Hall, Inc. All rights reserved. 2 8.1 Introduction• Sử dụng các toán tử với các đối tượng (operator overloading) – đối với một số lớp, sử dụng toán tử trong sáng hơn sử dụng các lời gọi hàm object2 = object1.add(object2); object2 = object2 + object1; – toán tử cảm ngữ cảnh (sensitive to context) Ví dụ • 3 8.2 Fundamentals of Operator Overloading • Các kiểu dữ liệu – Có sẵn (Built in) (int, char) hoặc kiểu người dùng (user- defined) – Có thể sử dụng các toán tử có sẵn cho các kiểu dữ liệu người dùng • Không thể tạo toán tử mới • Overloading operators – Tạo một hàm của lớp – Đặt tên hàm là operator tiếp theo là ký hiệu • Operator+ dành cho phép cộng +© 2003 Prentice Hall, Inc. All rights reserved. 4 8.2 Fundamentals of Operator Overloading • Sử dụng toán tử với một đối tượng – Nó phải được overloaded cho lớp đó • ngoại trừ: • phép gán, = – phép gán từng thành viên của đối tượng này cho đối tượng kia (Memberwise assignment between objects) • toán tử địa chỉ, & – trả về địa chỉ của đối tượng • cả hai đều có thể được overloaded • Overloading cho ký hiệu ngắn gọn object2 = object1.add(object2); object2 = object2 + object1;© 2003 Prentice Hall, Inc. All rights reserved. 5 8.3 Restrictions on Operator Overloading • Không thể thay đổi: – Hoạt động của các toán tử đối với các kiểu dữ liệu có sẵn • ví dụ., không thể thay đổi phép cộng số nguyên – Thứ tự ưu tiên của các toán tử – Quan hệ kết hợp - Associativity (left-to-right hoặc right-to- left) – Số lượng toán hạng (operand) • & là toán tử đơn, chỉ dành cho một toán hạng • Không thể tạo các toán tử mới • Các toán tử phải được overloaded một cách tường minh – Overload + không có nghĩa cả += cũng được overload© 2003 Prentice Hall, Inc. All rights reserved. 6 8.3 Restrictions on Operator Overloading Operators that can be overloaded + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= > >>= [] () new delete new[] delete[] Operators that cannot be overloaded . .* :: ?: sizeof© 2003 Prentice Hall, Inc. All rights reserved. 7 8.4 Operator Functions As Class Members Vs. As Friend Functions • aa@bb aa.operator@(bb) hoặc operator@(aa,bb) • @aa aa.operator@( ) hoặc operator@(aa) • aa@ aa.operator@(int) hoặc operator@(aa,int) • Operator functions – Member functions • Sử dụng từ khóa this để ngầm lấy tham số – là toán hạng bên trái đối với các toán tử hai ngôi (ví dụ +) – là toán hạng duy nhất đối với các toán tử một ngôi • Toán tử và toán hạng bên trái nhất phải thuộc cùng lớp – Non member functions • Cần tham số cho cả hai toán hạng • Có thể lấy các đối tượng không thuộc lớp của toán tử • Phải là friend để truy nhập các dữ liệu private hoặc protected© 2003 Prentice Hall, Inc. All rights reserved. 8 8.4 Operator Functions As Class Members Vs. As Friend Functions • Các phép toán có tính giao hoán – phép + cần có tính giao hoán • cả “a + b” và “b + a” đều phải chạy được – giả sử ta có hai lớp khác nhau – Overloaded operator chỉ có thể là member function khi lớp của nó ở bên trái • HugeIntClass + long int – ...

Tài liệu được xem nhiều: