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ỏ
lượt xem 3
download
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.
Bình luận(0) Đăng nhập để gửi bình luận!
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ỏ
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Phương pháp lập trình: Chương 1 - GV. Từ Thị Xuân Hiền
18 p | 132 | 17
-
Bài giảng Phương pháp lập trình: Chương 2 - GV. Từ Thị Xuân Hiền
50 p | 108 | 15
-
Bài giảng Phương pháp lập trình: Chương 6 - GV. Từ Thị Xuân Hiền
39 p | 105 | 15
-
Bài giảng Phương pháp lập trình: Chương 3 - GV. Từ Thị Xuân Hiền
29 p | 117 | 12
-
Bài giảng Phương pháp lập trình: Chương 5 - GV. Từ Thị Xuân Hiền
37 p | 115 | 12
-
Bài giảng Phương pháp lập trình: Chương 4 - GV. Từ Thị Xuân Hiền
19 p | 104 | 11
-
Bài giảng Phương pháp lập trình: Chương 7 - GV. Từ Thị Xuân Hiền
18 p | 118 | 11
-
Bài giảng Phương pháp lập trình: Chương 9 - GV. Từ Thị Xuân Hiền
36 p | 101 | 10
-
Bài giảng Phương pháp lập trình: Chương 3
23 p | 115 | 10
-
Bài giảng Phương pháp lập trình: Chương 8 - GV. Từ Thị Xuân Hiền
25 p | 102 | 10
-
Bài giảng Phương pháp lập trình: Chương 6 (tiếp theo)
43 p | 85 | 9
-
Bài giảng Phương pháp lập trình: Chương 4
9 p | 96 | 6
-
Bài giảng Phương pháp lập trình hướng đối tượng: Bài tập 5 - Trần Phước Tuấn
4 p | 114 | 6
-
Bài giảng Phương pháp lập trình: Chương 7
16 p | 71 | 4
-
Bài giảng Phương pháp lập trình - Chương 1: Phương pháp lập trình (2016)
64 p | 73 | 4
-
Bài giảng Phương pháp lập trình: Bài 2 - TS. Ngô Hữu Dũng
45 p | 73 | 4
-
Bài giảng Phương pháp lập trình: Bài 4 - TS. Ngô Hữu Dũng
51 p | 92 | 4
-
Bài giảng Phương pháp lập trình: Bài 11 - TS. Ngô Hữu Dũng
42 p | 62 | 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