Hướng đối tượng toàn tập 5

Chia sẻ bởi Lê Văn Thanh Thúc | Ngày 10/05/2019 | 59

Chia sẻ tài liệu: Hướng đối tượng toàn tập 5 thuộc Tin học 12

Nội dung tài liệu:

1
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Thành phần tĩnh,
Ba vấn đề con trỏ
2
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Nội dung
Thành phần tĩnh.
Ba vấn đề con trỏ.
Bài tập.
3
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Nội dung
Thành phần tĩnh.
Ba vấn đề con trỏ.
Bài tập.
4
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
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
1
PhanSo
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!!
5
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
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_iGiaTriLN;
public:
static int layGiaTriLN();
private:
int m_iTu;
int m_iMau;
};
PhanSo::m_iGiaTriLN = 10000;

void main()
{
PhanSo p1(1, 2);
PhanSo p2(2, 3);

int x1 = PhanSo::layGiaTriLN();
int x2 = p1.layGiaTriLN();
}
6
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Nội dung
Thành phần tĩnh.
Ba vấn đề con trỏ.
Bài tập.
7
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Ba vấn đề con trỏ
Ví dụ 1:
class Array
{
private:
int m_iSize;
int *m_pData;
public:
Array(int iSize);
};
Array::Array(int iSize)
{
m_iSize = iSize;
m_pData = new int[m_iSize];
}
void main()
{
Array a1(5);

}
8
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
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_iSize
m_pData
Phải dùng hàm hủy để dọn dẹp!!
101
Rò rỉ bộ nhớ!!
5
9
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Ba vấn đề con trỏ
Ví dụ 1:
class Array
{
private:
int m_iSize;
int *m_pData;
public:
Array(int iSize);
~Array();
};
Array::~Array()
{
delete m_pData;
}
void main()
{
Array a1(5);

}
10
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Ba vấn đề con trỏ
Ví dụ 2:
class Array
{
private:
int m_iSize;
int *m_pData;
public:
Array(int iSize);
~Array();
};
void main()
{
Array a1(5);
Array a2(a1);

}
11
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
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_iSize
m_pData
Phải cài đặt lại hàm dựng sao chép!!
101
5
a2: Array

m_iSize
m_pData
101
5
Dùng chung bộ nhớ!!
Mất bộ nhớ!!
12
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Ba vấn đề con trỏ
Ví dụ 2:
class Array
{
private:
int m_iSize;
int *m_pData;
public:
Array(int iSize);
Array(const Array &a);
~Array();
};
void main()
{
Array a1(5);
Array a2(a1);

}
Array::Array(const Array &a)
{
m_iSize = a.m_iSize;
m_pData = new int[m_iSize];
for (int i = 0; i < m_iSize; i++)
m_pData[ i ] = a.m_pData[ i ];
}
13
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Ba vấn đề con trỏ
Ví dụ 3:
class Array
{
private:
int m_iSize;
int *m_pData;
public:
Array(int iSize);
Array(const Array &a);
~Array();
};
void main()
{
Array a1(5);
Array a2(6);

a2 = a1;

}
14
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
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_iSize
m_pData
Phải cài đặt lại toán tử gán!!
101
5
a2: Array

m_iSize
m_pData
405
6
101
5
Rò rỉ bộ nhớ!!
Dùng chung bộ nhớ!!
Mất bộ nhớ!!
15
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Ba vấn đề con trỏ
Ví dụ 2:
class Array
{
private:
int m_iSize;
int *m_pData;
public:
Array(int iSize);
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_pData;
m_iSize = a.m_iSize;
m_pData = new int[m_iSize];
for (int i = 0; i < m_iSize; i++)
m_pData[ i ] = a.m_pData[ i ];
return *this;
}
16
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
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_sHoTen;
public:
HocSinh(const HocSinh &hs);
~HocSinh();
HocSinh & operator =(const HocSinh &hs);
};
17
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
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.
18
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Nội dung
Thành phần tĩnh.
Ba vấn đề con trỏ.
Bài tập.
19
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
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 Date.
(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.
20
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Bài tập
Bài tập 5.2:
Bổ sung vào lớp Date phương thức tĩnh 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.
21
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
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 đơn thức 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 đó.
22
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
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: >, <, ==, >=, <=.
Toán tử mảng: [ ].
Toán tử nhập xuất: >>, <<.
23
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Bài tập
Bài tập 5.4:
Xây dựng lớp chuỗi có những phương thức sau:
(Nhóm tạo hủy)
Khởi tạo mặc định chuỗi rỗng.
Khởi tạo với từ chuỗi ký tự cho trước .
Khởi tạo từ một đối tượng chuỗi khác.
Hủy chuỗi, thu hồi bộ nhớ.
(Nhóm truy xuất thông tin)
Lấy chiều dài chuỗi.
24
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Bài tập
Bài tập 5.4:
Xây dựng lớp chuỗi (tiếp theo):
(Nhóm xử lý nghiệp vụ)
So sánh với chuỗi khác.
Đổi chữ hoa, thường.
Tìm chuỗi con.
Trích chuỗi con.
(Nhóm toán tử)
Toán tử số học: +, =, +=.
Toán tử so sánh: >, <, ==, >=, <=, !=
Toán tử mảng: [ ].
Toán tử ép kiểu: (char *).
Toán tử nhập xuất: >>, <<.
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Lê Văn Thanh Thúc
Dung lượng: | Lượt tài: 2
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)