Bài giảng Lập trình hướng đối tượng: Chương 4 - Trần Minh Thái
lượt xem 6
download
Chương 4 của bài giảng Lập trình hướng đối tượng giới thiệu về khả năng đa năng hoá toán tử của C++. Thông qua chương này người học có thể biết được cách cách cài đặt và sử dụng đa năng hoá toán tử, nắm bắt được một số kỹ thuật đa năng hoá toán tử đặc biệt. Mời 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
- 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 1 - TS. Trần Công Án
57 p | 89 | 13
-
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 | 174 | 12
-
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 | 140 | 9
-
Bài giảng Lập trình hướng đối tượng C++ - Chương 2: Lập trình hướng đối tượng
53 p | 46 | 8
-
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 | 80 | 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 (Dùng C#): Chương 2 - Trần Minh Thái
35 p | 103 | 8
-
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 - ThS. Trịnh Thành Trung
53 p | 87 | 7
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Minh Thái
40 p | 116 | 6
-
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 | 100 | 6
-
Bài giảng Lập trình hướng đối tượng – Bài 01: Tổng quan về OOP
47 p | 63 | 5
-
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 | 99 | 5
-
Bài giảng Lập trình hướng đối tượng và C++: Chương 1
15 p | 104 | 4
-
Bài giảng Lập trình hướng đối tượng: Nhập môn - Trần Phước Tuấn
15 p | 139 | 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 | 11 | 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 | 15 | 3
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Nguyễn Khanh Văn
0 p | 83 | 2
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