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

Bài giảng Phương pháp lập trình hướng đối tượng: Thành phần tĩnh - Ba vấn đề con trỏ

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

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

Bài giảng Phương pháp lập trình hướng đối tượng này trình bày các nội dung: Thành phần tĩnh (Thuộc tính và phương thức thuộc phạm vi lớp, các đối tượng dùng chung thành phần tĩnh của lớp, phương thức tĩnh chỉ truy xuất được thành phần tĩnh), ba vấn đề con trỏ. Mời các bạn cùng tham khảo để nắm bắt các nội dung chi tiết.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Phương pháp lập trình hướng đối tượng: Thành phần tĩnh - Ba vấn đề con trỏ

  1. Thành phần tĩnh, Ba vấn đề con trỏ Phương pháp lập trình hướng đối tượng. 1
  2. Nội dung  Thành phần tĩnh.  Ba vấn đề con trỏ.  Bài tập. Phương pháp lập trình hướng đối tượng. 2
  3. Nội dung  Thành phần tĩnh.  Ba vấn đề con trỏ.  Bài tập. Phương pháp lập trình hướng đối tượng. 3
  4. Thành phần tĩnh  Thành phần của lớp (class members):  Thành phần đối tượng (instance members).  Thuộc tính và phương thức thông thường.  Mỗi đối tượng có bản sao riêng.  Thành phần tĩnh (static members).  Thuộc tính và phương thức tĩnh.  Các đối tượng dùng chung. p1: PhanSo PhanSo Tử số 1 Tử số Mẫu số 2 Thành phần dùng chung cho Mẫu số MỌI đối tượng của lớp!! Giá trị lớn nhất p2: PhanSo Giá trị nhỏ nhất Tử số 2 Mẫu số 3 Phương pháp lập trình hướng đối tượng. 4
  5. Thành phần tĩnh  Khai báo và sử dụng:  Dùng từ khóa static.  Truy xuất bằng toán tử ::. class PhanSo PhanSo::m_giaTriLN = 10000; { private: void main() static int m_giaTriLN; { public: PhanSo p1(1, 2); static int layGiaTriLN(); PhanSo p2(2, 3); private: int m_tuSo; int x1 = PhanSo::layGiaTriLN(); int m_mauSo; int x2 = p1.layGiaTriLN(); }; } Phương pháp lập trình hướng đối tượng. 5
  6. Nội dung  Thành phần tĩnh.  Ba vấn đề con trỏ.  Bài tập. Phương pháp lập trình hướng đối tượng. 6
  7. Ba vấn đề con trỏ  Ví dụ 1: class Array void main() { { private: Array a1(5); int m_size; … int *m_data; } public: Array(int size); }; Array::Array(int size) { m_size = size; m_data = new int[m_size]; } Phương pháp lập trình hướng đối tượng. 7
  8. Ba vấn đề con trỏ  Vấn đề rò rỉ bộ nhớ:  Lớp có thuộc tính con trỏ.  Đối tượng của lớp bị hủy, bộ nhớ không thu hồi. a1: Array Rò Rò rỉrỉbộ bộ nhớ!! nhớ!! m_size 5 m_data 101 1 2 3 4 5 Phải dùng hàm hủy để dọn dẹp!! Phương pháp lập trình hướng đối tượng. 8
  9. Ba vấn đề con trỏ  Ví dụ 1: class Array void main() { { private: Array a1(5); int m_size; … int *m_data; } public: Array(int size); ~Array(); }; Array::~Array() { delete m_data; } Phương pháp lập trình hướng đối tượng. 9
  10. Ba vấn đề con trỏ  Ví dụ 2: class Array void main() { { private: Array a1(5); int m_size; Array a2(a1); int *m_data; … public: } Array(int size); ~Array(); }; Phương pháp lập trình hướng đối tượng. 10
  11. Ba vấn đề con trỏ  Vấn đề sao chép bộ nhớ (hdsc mặc định):  Hàm dựng sao chép mặc định sao chép giá trị từng thuộc tính. Dùng Dùngchung chung Mất Mấtbộ bộ nhớ!! nhớ!! bộ bộnhớ!! nhớ!! a1: Array a2: Array m_size 5 m_size m_data m_data 101 1 2 3 4 5 Phải cài đặt lại hàm dựng sao chép!! Phương pháp lập trình hướng đối tượng. 11
  12. Ba vấn đề con trỏ  Ví dụ 2: class Array Array::Array(const Array &a) { { private: m_size = a.m_size; int m_size; m_data = new int[m_size]; int *m_data; for (int i = 0; i < m_size; i++) public: m_data[ i ] = a.m_data[ i ]; Array(int size); } Array(const Array &a); void main() ~Array(); { }; Array a1(5); Array a2(a1); … } Phương pháp lập trình hướng đối tượng. 12
  13. Ba vấn đề con trỏ  Ví dụ 3: class Array void main() { { private: Array a1(5); int m_size; Array a2(6); int *m_data; … public: a2 = a1; Array(int size); … Array(const Array &a); } ~Array(); }; Phương pháp lập trình hướng đối tượng. 13
  14. Ba vấn đề con trỏ  Vấn đề sao chép bộ nhớ (ttg mặc định):  Toán tử gán mặc định sao chép giá trị từng thuộc tính. Dùng Dùngchung chung Rò Rò rỉrỉbộ bộ nhớ!! nhớ!! Mất Mấtbộ bộ nhớ!! nhớ!! bộ bộnhớ!! nhớ!! a1: Array a2: Array m_size 1 2 3 4 5 6 m_size 5 6 m_data m_data 101 1 2 3 4 5 405 Phải cài đặt lại toán tử gán!! Phương pháp lập trình hướng đối tượng. 14
  15. Ba vấn đề con trỏ  Ví dụ 2: class Array Array & Array::operator =(const Array &a) { { private: delete m_data; int m_size; m_size = a.m_size; int *m_data; m_data = new int[m_size]; public: for (int i = 0; i < m_size; i++) Array(int size); m_data[ i ] = a.m_data[ i ]; Array(const Array &a); return *this; void main() ~Array(); } { Array & operator =(const Array &a); Array a1(5); }; Array a2(6); … a2 = a1; … Phương pháp lập trình hướng đối tượng. } 15
  16. Ba vấn đề con trỏ  Dr. Guru khuyên: luật “ba ông lớn”  Lớp có thuộc tính con trỏ, phải luôn kèm theo:  Hàm hủy: thu hồi bộ nhớ.  Hàm dựng sao chép: sao chép bộ nhớ.  Toán tử gán: sao chép bộ nhớ. class HocSinh { private: char *m_hoTen; public: HocSinh(const HocSinh &h); ~HocSinh(); HocSinh & operator =(const HocSinh &h); }; Phương pháp lập trình hướng đối tượng. 16
  17. Tóm tắt  Thành phần tĩnh:  Thuộc tính và phương thức thuộc phạm vi lớp.  Các đối tượng dùng chung thành phần tĩnh của lớp.  Phương thức tĩnh chỉ truy xuất được thành phần tĩnh.  Ba vấn đề con trỏ:  Khi lớp có thuộc tính con trỏ:  Phải có hàm hủy.  Phải có hàm dựng sao chép.  Phải có toán tử gán. Phương pháp lập trình hướng đối tượng. 17
  18. Nội dung  Thành phần tĩnh.  Ba vấn đề con trỏ.  Bài tập. Phương pháp lập trình hướng đối tượng. 18
  19. Bài tập  Bài tập 5.1: Dùng thành phần tĩnh để xây dựng bộ đếm đối tượng cho lớp Time. (Gợi ý)  Khai báo thuộc tính tĩnh lưu số đối tượng được tạo ra.  Tăng giá trị thuộc tính này khi khởi tạo đối tượng.  Giảm giá trị thuộc tính này khi hủy đối tượng.  Xây dựng phương thức tĩnh để truy xuất thuộc tính này. Phương pháp lập trình hướng đối tượng. 19
  20. Bài tập  Bài tập 5.2: Bổ sung vào lớp Date phương thức tĩnh cho phép tạo đối tượng từ chuỗi “dd/MM/yyyy” cho trước. (Gợi ý)  Phân tích chuỗi “dd/MM/yyyy” ra thành ngày, tháng, năm.  Khởi tạo đối tượng từ ngày, tháng, năm vừa phân tích.  Trả về đối tượng vừa tạo. Phương pháp lập trình hướng đối tượng. 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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