Thông tin tài liệu
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 tố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); }; void main(){ Array a1(5); … } 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 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ỉ 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 chung nhớ!! Mất 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 chung nhớ!! Rò rỉ nhớ!! a1: Array ▪m_size ▪m_data Mất 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){ delete m_data; m_size = a.m_size; m_data = new int[m_size]; for (int i = 0; i < m_size; i++) class Array{ private: m_data[ i ] = a.m_data[ i ]; int m_size; return *this; int *m_data; } public: Array(int size); void main(){ Array(const Array &a); Array a1(5); ~Array(); Array a2(6); Array & operator =(const Array &a); … }; a2 = a1; … } Phương pháp lập trình hướng đối tượng 15 Ba vấn đề trỏ ◼ Dr Guru khun: luật “ba ơng lớn” ◼ Lớp có thuộc tính trỏ, phải ln 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ó tố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 tốn tử) ◼ Tốn tử số học: +, -, *, /, = ◼ Toán tử so sánh: >, =, >, , =, >,
Ngày đăng: 03/11/2019, 19:31
Xem thêm: