Bài giảng Lập trình hướng đối tượng: Chương 4 - Trần Minh Thái (2016)
lượt xem 7
download
Bài giảng "Lập trình hướng đối tượng - Chương 4: Đa năng hóa toán tử" giới thiệu tới người học các kiến thức về đa năng hóa toán tử, cách cài đặt và sử dụng đa năng hóa toán tử, một số kỹ thuật đa năng hóa toán tử đặc biệt. Mời các bạn cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình hướng đối tượng: Chương 4 - Trần Minh Thái (2016)
- Chương 4 Đa năng 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 1. Giới thiệu 2. Cách cài đặt & sử dụng đa năng hoá toán tử 3. Một số kỹ thuật đa năng hoá toán tử đặc biệt
- Giới thiệu (1/3) #3 • Đa năng hóa toán tử là khả năng của C++ cho phép định nghĩa lại toán tử (+, -, *, / , …) trên kiểu dữ liệu khác Chương trình ngắn gọn, dễ đọc và có ý nghĩa hơn so với việc gọi hàm bình thường • Đa năng hóa toán tử bằng cách định nghĩa hoạt động của từng toán tử giống như định nghĩa một 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 toán tử • Hàm toàn cục (hàm tự do) hàm friend • Hàm thành viên của 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 khi gọi Hàm thành viên Hàm toàn cục aa#bb aa.operator#(bb operator#(aa,bb ) ) #aa aa.operator#() operator#(aa) aa# aa.operator#(int operator#(aa,int Với # là ký hiệu dấu toán ) ) tử
- Các lưu ý (1/) #6 • Không thể định nghĩa toán tử mới • Phần lớn các toán tử được đa năng hóa ngoại trừ các toán tử sau: . .* :: ?: typeid sizeof const_cast dynamic_cast reinterpret_cast static_cast • Không thể đa năng hóa ký hiệu tiền xử lý • Không thể thay đổi độ ưu tiên của toán tử hay số các toán hạng của nó
- Các lưu ý (2/) #7 • Không thể thay đổi ý nghĩa của toán tử khi áp dụng các kiểu cài sẵn • Không dùng tham số có giá trị mặc định • Các toán tử: = [] () -> đòi hỏi hàm toán tử phải là 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 các tham số của hàm toán tử phụ thuộc: • Toán tử một ngôi hay hai ngôi • Toán tử được khai báo là hàm toàn cục hoặc hàm thành viên
- Tham số (2/2) #9 • Nên sử dụng tham chiếu khi có thể (đối tượng lớn) • Luôn sử dụng tham số hằng tham chiếu nế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 là hàm thành viên hằng nếu toán hạng đầu tiên không bị sửa đổi • Các toán tử tính toán/ so sánh thường dùng hằng tham chiếu
- Giá trị trả về #10 • Tuân thủ theo đặc điểm chung của các cài đặt có sẵn của toán tử • Các phép so sánh (==, !=…) thường trả về giá trị kiểu bool phiên bản đa năng hóa cũng nên trả về bool • Giá trị trả về có thể là hằng hoặc tham chiếu tuỳ theo ngữ cảnh
- Ví dụ hàm toán tử thành viên (1/3) class CComplex #11 { private: double real, image; public: CComplex (double r = 0, double i=0) { real = r; image = i; } void Print() const; void Println() const; CComplex operator + (CComplex c) const; CComplex operator + (double r) const; }; void CComplex::Print() const { cout
- Ví dụ hàm toán tử thành viên (2/3) #12 void CComplex::Println() const { Print(), cout
- Ví dụ hàm toán tử thành viên (3/3) #13 CComplex c1 (3,5), c2(3, 2); CComplex c3, c4; c3 = c1 + c2; //OK: c3 = c1.operator + (c2) c1.Print(), cout
- Ví dụ hàm toán tử friend (1/5) #14 class CComplex { private : double real, image; public : CComplex(); CComplex (double r, double i); CComplex (double r); //constructor chuyển kiểu: double CComplex CComplex (const CComplex &c ); //constructor sao chép void Print() const; void Println() const; friend CComplex operator + ( CComplex c1, CComplex c2 ); friend CComplex operator ( CComplex c1, CComplex c2 ); CComplex operator += (CComplex c); friend bool operator == (CComplex c1, CComplex c2);
- Ví dụ hàm toán tử friend (2/5) CComplex::CComplex() #15 { real = image = 0.0; } CComplex::CComplex(double r, double i) { real = r; image = i; } CComplex::CComplex(double r) { real = r; image= 0.0; } CComplex::CComplex(const CComplex &c) { real = c.real; image = c.image; }
- Ví dụ hàm toán tử friend (3/5) #16 void CComplex::Print() const { cout
- Ví dụ hàm toán tử friend (4/5) CComplex operator (CComplex c1, CComplex c2) #17 { CComplex tmp; tmp.real = c1.real c2.real; tmp.image = c1.image c2.image; return tmp; } bool operator == (CComplex c1, CComplex c2) { return (c1.real==c2.real)&&(c1.image==c2.image); } CComplex CComplex::operator += (CComplex c) { real+=c.real; image+=c.image; return *this; }
- Ví dụ hàm toán tử friend (5/5) #18 CComplex c1 (3,5), c2(3, 2); CComplex c3, c4; c3 = c1 + c2; //OK: c3 = operator + (c1,c2) c1.Print(), cout
- Ví dụ đa năng hoá toán tử 1 ngôi (1/2) Gồm các toán tử: + - ! ++ -- -> ~ * & #19 class CComplex { private : double real, image; public : CComplex(); CComplex (double r, double i); CComplex (double r); CComplex (const CComplex &c ); //constructor sao chép void Print() const; friend CComplex operator + ( CComplex c1, CComplex c2 ); friend CComplex operator ( CComplex c1, CComplex c2 ); friend bool operator == (CComplex c1, CComplex c2); CComplex operator += (CComplex c); CComplex operator (); };
- Ví dụ đa năng hoá toán tử 1 ngôi (2/2) #20 CComplex CComplex::operator() { CComplex tmp; tmp.real = real; tmp.image = image; return tmp; }
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình hướng đối tượng: Chương 3 - Nguyễn Sơn Hoàng Quốc, ThS. Nguyễn Tấn Trần Minh Khang
38 p | 140 | 19
-
Bài giảng Lập trình hướng đối tượng - Chương 2: Đối tượng và lớp
21 p | 171 | 15
-
Bài giảng Lập trình hướng đối tượng: Chương 2 - Nguyễn Sơn Hoàng Quốc, ThS. Nguyễn Tấn Trần Minh Khang
14 p | 177 | 12
-
Bài giảng Lập trình hướng đối tượng - Chương 3: Kế thừa
18 p | 139 | 10
-
Bài giảng Lập trình hướng đối tượng - Chương 1: Phương pháp lập trình hướng đối tượng
9 p | 142 | 9
-
Bài giảng Lập trình hướng đối tượng (dùng Java): Chương 1 - Trần Minh Thái (2017)
55 p | 81 | 8
-
Bài giảng Lập trình hướng đối tượng - Bài 1: Tổng quan lập trình hướng đối tượng
53 p | 120 | 8
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - ThS. Trịnh Thành Trung
53 p | 92 | 7
-
Bài giảng Lập trình hướng đối tượng 1: Chương 1 - ThS. Thái Kim Phụng
39 p | 110 | 7
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Thị Anh Thi
7 p | 197 | 7
-
Bài giảng Lập trình hướng đối tượng - Bài 1: Tổng quan về OOP
0 p | 146 | 7
-
Bài giảng Lập trình hướng đối tượng – Bài 01: Tổng quan về OOP
47 p | 67 | 6
-
Bài giảng Lập trình hướng đối tượng (dùng JAVA): Chương 1 - Trần Minh Thái
40 p | 100 | 5
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - GV. Hà Văn Sang
29 p | 89 | 5
-
Bài giảng Lập trình hướng đối tượng và C++: Chương 1
15 p | 106 | 4
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Tổng quan về lập trình hướng đối tượng
47 p | 13 | 4
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Các khái niệm cơ bản trong lập trình hướng đối tượng
36 p | 18 | 3
-
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 2: Phương pháp lập trình hướng đối tượng
35 p | 11 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn