intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Lập trình hướng đối tượng: Chương 4 - Trần Minh Thái

Chia sẻ: Năm Tháng Tĩnh Lặng | Ngày: | Loại File: PPTX | Số trang:47

57
lượt xem
6
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

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

  1. 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
  2. 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
  3. 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ử
  4. 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
  5. 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ử
  6. 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ó
  7. 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 + - * /
  8. 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
  9. 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
  10. 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
  11. 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
  12. Ví dụ hàm toán tử thành viên (2/3) #12 void CComplex::Println() const { Print(),  cout
  13. 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
  14. 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);
  15. 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; }
  16. Ví dụ hàm toán tử friend (3/5) #16 void CComplex::Print() const { cout
  17. 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; }
  18. 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
  19. 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 ­ (); }; 
  20. 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; }
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2