Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 47 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
47
Dung lượng
213,23 KB
Nội dung
Chương Đa hoá toán tử TRẦN MINH THÁI Email: minhthai@itc.edu.vn Website: www.minhthai.edu.vn Cập nhật: 10 tháng 02 năm 2015 Nội dung #2 Giới thiệu Cách cài đặt & sử dụng đa hoá toán tử Một số kỹ thuật đa hoá toán tử đặc biệt Giới thiệu (1/3) #3 Đa hóa tốn tử khả C++ cho phép định nghĩa lại toán tử (+, -, *, / , …) kiểu liệu khác → Chương trình ngắn gọn, dễ đọc có ý nghĩa so với việc gọi hàm bình thường Đa hóa tốn tử cách định nghĩa hoạt động toán tử giống định nghĩa hàm → hàm toán tử Giới thiệu (2/3) #4 Cú pháp: type_name operator operator_symbol ( parameters_list ) { ……………… } Hàm tốn tử Hàm tồn cục (hàm tự do) → hàm friend Hàm thành viên lớp (hàm non-static) → có thuộc tính truy xuất public Giới thiệu (3/3) #5 Khai báo Cú pháp gọi Hàm thành viên aa#bb Hàm toàn cục aa.operator#(bb) operator#(aa,bb) #aa aa.operator#() operator#(aa) aa# aa.operator#(int) operator#(aa,int) Với # ký hiệu dấu tốn tử Các lưu ý (1/) #6 Khơng thể định nghĩa toán tử Phần lớn toán tử đa hóa ngoại trừ tốn tử sau: * :: ?: typeid sizeof const_cast dynamic_cast reinterpret_cast Không thể đa hóa ký hiệu tiền xử lý Khơng thể thay đổi độ ưu tiên toán tử hay số tốn hạng static_cast Các lưu ý (2/) #7 Khơng thể thay đổi ý nghĩa tốn tử áp dụng kiểu cài sẵn Không dùng tham số có giá trị mặc định Các tốn tử: = [] () -> địi hỏi hàm tốn tử phải hàm thành viên Phải chủ động định nghĩa toán tử += -= *= /= dù định nghĩa + - * / Tham số (1/2) #8 Số lượng tham số hàm toán tử phụ thuộc: Toán tử ngơi hay hai ngơi Tốn tử khai báo hàm toàn cục hàm thành viên Tham số (2/2) #9 Nên sử dụng tham chiếu (đối tượng lớn) Luôn sử dụng tham số tham chiếu tham số không bị sửa đổi bool CComplex::operator == (const CComplex & c) const; Hàm thành viên nên khai báo hàm thành viên toán hạng khơng bị sửa đổi Các tốn tử tính toán/ so sánh thường dùng tham chiếu Giá trị trả #10 Tuân thủ theo đặc điểm chung cài đặt có sẵn tốn tử Các phép so sánh (==, !=…) thường trả giá trị kiểu bool → phiên đa hóa nên trả bool Giá trị trả tham chiếu tuỳ theo ngữ cảnh Đa hoá toán tử new & delete (1/3) #33 Thay hẳn tốn tử Hàm tồn cục Chỉ áp dụng cho đối tượng lớp Hàm thành viên lớp Cú pháp void * operator new(size_t size); void operator delete(void * ptr); Đa hoá toán tử new & delete (2/3) void * operator new(size_t size) { #34 return malloc(size); Hàm toàn cục } void operator delete(void *ptr) { class CMyPoint free(ptr); { } int x, y; public: CMyPoint *p1,*p2; CMyPoint(int a=0,int b=0) p1 = new CMyPoint(10,20); { p2 = new CMyPoint(-10,-20); x=a; int *x=new int; y=b; *x=10; } cout