Tải bản đầy đủ (.pdf) (14 trang)

Fundamentals of Operator Overloading

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (137.85 KB, 14 trang )

©
2003 Prentice Hall, Inc. All rights reserved.
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ụ
• <<


– chèn vào dòng (Stream insertion), phép dịch trái nhị phân (bitwise
left-shift)
• +
–thực hiện tính cộng cho nhiều kiểu dữ liệu (integers, floats, etc.)
©
2003 Prentice Hall, Inc. All rights reserved.
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ĩacả += cũng được overload

×