Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 24 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
24
Dung lượng
850 KB
Nội dung
Chương 3: Thành phần tĩnh, Ba vấn đề trỏ Phương pháp lập trình hướng đối tượng Nội dung Thành phần tĩnh Ba vấn đề trỏ Bài tập Phương pháp lập trình hướng đối tượng Nội dung Thành phần tĩnh Ba vấn đề trỏ Bài tập Phương pháp lập trình hướng đối tượng Thành phần tĩnh Thành phần lớp (class members): Thành phần đối tượng (instance members) Thuộc tính phương thức thông thường Mỗi đối tượng có riêng Thành phần tĩnh (static members) Thuộc tính phương thức tĩnh Các đối tượng dùng chung Thành phần dùng chung cho MỌI đối tượng lớp!! Phương pháp lập trình hướng đối tượng PhanSo Tử số Mẫu số Giá trị lớn Giá trị nhỏ p1: PhanSo Tử số Mẫu số p2: PhanSo Tử số Mẫu số Thành phần tĩnh Khai báo sử dụng: Dùng từ khóa static Truy xuất toán tử :: class PhanSo { private: static int m_giaTriLN; public: static int layGiaTriLN(); private: int m_tuSo; int m_mauSo; }; Phương pháp lập trình hướng đối tượng PhanSo::m_giaTriLN = 10000; void main() { PhanSo p1(1, 2); PhanSo p2(2, 3); int x1 = PhanSo::layGiaTriLN(); int x2 = p1.layGiaTriLN(); } Nội dung Thành phần tĩnh Ba vấn đề trỏ Bài tập Phương pháp lập trình hướng đối tượng Ba vấn đề 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]; } Phương pháp lập trình hướng đối tượng void main() { Array a1(5); … } Ba vấn đề trỏ Vấn đề rò rỉ nhớ: Lớp có thuộc tính trỏ Đối tượng lớp bị hủy, nhớ không thu hồi a1: Array m_size m_data Rò Ròrỉrỉbộ nhớ!! nhớ!! 101 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 Ba vấn đề trỏ Ví dụ 1: class Array { private: 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 void main() { Array a1(5); … } Ba vấn đề trỏ Ví dụ 2: class Array { private: int m_size; int *m_data; public: Array(int size); ~Array(); }; Phương pháp lập trình hướng đối tượng void main() { Array a1(5); Array a2(a1); … } 10 Ba vấn đề trỏ Vấn đề chép nhớ (hdsc mặc định): Hàm dựng chép mặc định chép giá trị thuộc tính Dùng Dùngchung chung bộnhớ!! nhớ!! Mất Mấtbộ bộnhớ!! nhớ!! a1: Array m_size m_data a2: Array m_size 101 m_data Phải cài đặt lại hàm dựng chép!! Phương pháp lập trình hướng đối tượng 11 Ba vấn đề trỏ Ví dụ 2: class Array { private: int m_size; int *m_data; public: Array(int size); Array(const Array &a); ~Array(); }; Phương pháp lập trình hướng đối tượng 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 ]; } void main() { Array a1(5); Array a2(a1); … } 12 Ba vấn đề trỏ Ví dụ 3: class Array { private: int m_size; int *m_data; public: Array(int size); Array(const Array &a); ~Array(); }; Phương pháp lập trình hướng đối tượng void main() { Array a1(5); Array a2(6); … a2 = a1; … } 13 Ba vấn đề trỏ Vấn đề chép nhớ (ttg mặc định): Toán tử gán mặc định chép giá trị thuộc tính Dùng Dùngchung chung bộnhớ!! nhớ!! Rò Ròrỉrỉbộ bộnhớ!! nhớ!! a1: Array m_size m_data Mất Mấtbộ bộnhớ!! nhớ!! a2: Array 101 m_size m_data 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 đề trỏ Ví dụ 2: Array & Array::operator =(const Array &a) class Array { { delete m_data; 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); return *this; Array(const Array &a); 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 đề trỏ Dr Guru khuyên: luật “ba ông lớn” Lớp có thuộc tính trỏ, phải kèm theo: Hàm hủy: thu hồi nhớ Hàm dựng chép: chép nhớ Toán tử gán: chép 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 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 lớp Phương thức tĩnh truy xuất thành phần tĩnh Ba vấn đề trỏ: Khi lớp có thuộc tính trỏ: Phải có hàm hủy Phải có hàm dựng 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 đề 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 đế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 tạo Tăng giá trị thuộc tính khởi tạo đối tượng Giảm giá trị thuộc tính hủy đối tượng Xây dựng phương thức tĩnh để truy xuất thuộc tính 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” 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ả đối tượng vừa tạo Phương pháp lập trình hướng đối tượng 20 Bài tập Bài tập 5.3: Xây dựng lớp đa thức có phương thức sau: (Nhóm tạo hủy) Khởi tạo mặc định đa thức = Khởi tạo với bậc mảng hệ số cho trước Khởi tạo từ đối tượng đa thức khác Hủy đa thức, thu hồi nhớ (Nhóm truy xuất thông tin) Lấy bậc đa thức Lấy hệ số bậc Phương pháp lập trình hướng đối tượng 21 Bài tập Bài tập 5.3: Xây dựng lớp đa thức (tiếp theo): (Nhóm xử lý nghiệp vụ) So sánh với đa thức khác Rút gọn đa thức Tính giá trị, đạo hàm, nguyên hàm (Nhóm toán tử) Toán tử số học: +, -, *, /, = Toán tử so sánh: >, =, >, , =, >, [...]... }; 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. .. 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 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ập xuất: >>, ... Thành phần tĩnh Ba vấn đề trỏ Bài tập Phương pháp lập trình hướng đối tượng Nội dung Thành phần tĩnh Ba vấn đề trỏ Bài tập Phương pháp lập trình hướng đối tượng Thành phần tĩnh Thành. .. tĩnh Ba vấn đề 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 đếm đối tượng cho lớp Time (Gợi ý) Khai báo thuộc tính tĩnh lưu số đối. .. size; m_data = new int[m_size]; } Phương pháp lập trình hướng đối tượng void main() { Array a1 (5) ; … } Ba vấn đề trỏ Vấn đề rò rỉ nhớ: Lớp có thuộc tính trỏ Đối tượng lớp bị hủy, nhớ không thu