Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Thành phần tĩnh, ba vấn đề con trỏ
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.
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Thành phần tĩnh, ba vấn đề con trỏ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Thành phần tĩnh, ba vấn đề con trỏ
1Phương pháp lập trình hướng đối tượng. Thành phần tĩnh, Ba vấn đề con trỏ 2Phương pháp lập trình hướng đối tượng. Nội dung Thành phần tĩnh. Ba vấn đề con trỏ. Bài tập. 3Phương pháp lập trình hướng đối tượng. Nội dung Thành phần tĩnh. Ba vấn đề con trỏ. Bài tập. 4Phương pháp lập trình hướng đối tượng. 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 Tử số Mẫu số 2 1PhanSo Tử số Mẫu số Giá trị lớn nhất Giá trị nhỏ nhất p2: PhanSo Tử số Mẫu số 3 2 Thành phần dùng chung cho MỌI đối tượng của lớp!! 5Phương pháp lập trình hướng đối tượng. 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 { private: static int m_giaTriLN; public: static int layGiaTriLN(); private: int m_tuSo; int m_mauSo; }; PhanSo::m_giaTriLN = 10000; void main() { PhanSo p1(1, 2); PhanSo p2(2, 3); int x1 = PhanSo::layGiaTriLN(); int x2 = p1.layGiaTriLN(); } 6Phương pháp lập trình hướng đối tượng. Nội dung Thành phần tĩnh. Ba vấn đề con trỏ. Bài tập. 7Phương pháp lập trình hướng đối tượng. Ba vấn đề con trỏ Ví dụ 1: class Array { private: int m_size; int *m_data; public: Array(int size); }; Array::Array(int size) { m_size = size; m_data = new int[m_size]; } void main() { Array a1(5); } 8Phương pháp lập trình hướng đối tượng. 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 m_size m_data Phải dùng hàm hủy để dọn dẹp!! 1 2 3 4 5101 Rò rỉ bộ nhớ!! 5 9Phương pháp lập trình hướng đối tượng. Ba vấn đề con trỏ Ví dụ 1: class Array { private: int m_size; int *m_data; public: Array(int size); ~Array(); }; Array::~Array() { delete m_data; } void main() { Array a1(5); } 10Phương pháp lập trình hướng đối tượng. Ba vấn đề con trỏ Ví dụ 2: class Array { private: int m_size; int *m_data; public: Array(int size); ~Array(); }; void main() { Array a1(5); Array a2(a1); } 11Phương pháp lập trình hướng đối tượng. 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. a1: Array m_size m_data Phải cài đặt lại hàm dựng sao chép!! 1 2 3 4 5101 5 a2: Array m_size m_data Dùng chung bộ nhớ!! Mất bộ nhớ!! 12Phương pháp lập trình hướng đối tượng. Ba vấn đề con trỏ Ví dụ 2: class Array { private: int m_size; int *m_data; public: Array(int size); Array(const Array &a); ~Array(); }; void main() { Array a1(5); Array a2(a1); } Array::Array(const Array &a) { m_size = a.m_size; m_data = new int[m_size]; for (int i = 0; i < m_size; i++) m_data[ i ] = a.m_data[ i ]; } 13Phương pháp lập trình hướng đối tượng. Ba vấn đề con trỏ Ví dụ 3: class Array { private: int m_size; int *m_data; public: Array(int size); Array(const Array &a); ~Array(); }; void main() { Array a1(5); Array a2(6); a2 = a1; } 14Phương pháp lập trình hướng đối tượng. 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. a1: Array m_size m_data Phải cài đặt lại toán tử gán!! 1 2 3 4 5101 5 a2: Array m_size m_data 405 6 1 2 3 4 5 6 Rò rỉ bộ nhớ!! Dùng chung bộ nhớ!! Mất bộ nhớ!! 15Phương pháp lập trình hướng đối tượng. Ba vấn đề con trỏ Ví dụ 2: class Array { private: int m_size; int *m_data; public: Array(int size); Array(const Array &a); ~Array(); Array & operator =(const Array &a); }; void main() { Array a1(5); Array a2(6); a2 = a1; } Array & Array::operator =(const Array &a) { delete m_data; m_size = a.m_size; m_data = new int[m_size]; for (int i = 0; i < m_size; i++) m_data[ i ] = a.m_data[ i ]; return *this; } 16Phương pháp lập trình hướng đối tượng. 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); }; 17Phương pháp lập trình hướng đối tượng. 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. 18Phương pháp lập trình hướng đối tượng. Nội dung Thành phần tĩnh. Ba vấn đề con trỏ. Bài tập. 19Phương pháp lập trình hướng đối tượng. 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. 20Phương pháp lập trình hướng đối tượng. 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. 21Phương pháp lập trình hướng đối tượng. Bài tập Bài tập 5.3: Xây dựng lớp đa thức có những phương thức sau: (Nhóm tạo hủy) Khởi tạo mặc định đa thức = 0. Khởi tạo với bậc và mảng hệ số cho trước. Khởi tạo từ một đối tượng đa thức khác. Hủy đa thức, thu hồi bộ nhớ. (Nhóm truy xuất thông tin) Lấy bậc đa thức. Lấy hệ số tại bậc nào đó. 22Phương pháp lập trình
File đính kèm:
- bai_giang_phuong_phap_lap_trinh_huong_doi_tuong_bai_thanh_ph.pdf