Hướng đối tượng toàn tập 3
Chia sẻ bởi Lê Văn Thanh Thúc |
Ngày 10/05/2019 |
56
Chia sẻ tài liệu: Hướng đối tượng toàn tập 3 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
Hàm dựng,
Hàm hủy,
Hàm toán tử
2
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Nội dung
Hàm dựng.
Hàm hủy.
Hàm toán tử.
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
Hàm dựng.
Hàm hủy.
Hàm toán tử.
Bài tập.
4
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm dựng
Khi đối tượng vừa được tạo:
Giá trị các thuộc tính bằng bao nhiêu?
Đối tượng cần có thông tin ban đầu.
Giải pháp:
Xây dựng phương thức cung cấp thông tin.
Người dùng quên gọi?!
“Làm khai sinh” cho đối tượng!
PhanSo
Tử số??
Mẫu số??
HocSinh
Họ tên??
Điểm văn??
Điểm toán??
Hàm dựng ra đời!!
5
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm dựng
Tính chất hàm dựng (constructor):
Tự động thực hiện khi đối tượng được tạo.
Có thể nạp chồng nhiều hàm dựng.
Trong C++, hàm dựng có tên trùng tên lớp.
class PhanSo
{
private:
int m_iTuSo;
int m_iMauSo;
public:
PhanSo(int iTuSo, int iMauSo);
PhanSo(int iGiaTri);
};
void main()
{
PhanSo p1(1, 2);
PhanSo *p2 = new PhanSo(5);
}
6
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm dựng
Hàm dựng mặc định (default constructor):
Khi lớp không có hàm dựng?
Trình biên dịch cung cấp hàm hựng mặc định.
Tính chất:
Không tham số.
Khởi tạo mặc định các thuộc tính.
class PhanSo
{
private:
int m_iTuSo;
int m_iMauSo;
};
void main()
{
PhanSo p1;
}
7
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm dựng
Hàm dựng sao chép (copy constructor):
Có tham số là đối tượng cùng lớp.
Dùng khởi tạo từ đối tượng cùng loại.
Lớp không có hàm dựng sao chép?
Trình biên dịch cung cấp.
class PhanSo
{
private:
int m_iTuSo;
int m_iMauSo;
public:
PhanSo(const PhanSo &p);
};
void main()
{
PhanSo p1(1, 2);
PhanSo p2(p1);
PhanSo p3 = p2;
}
8
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm dựng
Dr. Guru khuyên:
Một lớp nên có tối thiểu 3 hàm dựng sau:
Hàm dựng mặc định.
Hàm dựng có đầy đủ tham số.
Hàm dựng sao chép.
class PhanSo
{ private:
int m_iTuSo;
int m_iMauSo;
public:
PhanSo();
PhanSo(int iTuSo, int iMauSo);
PhanSo(const PhanSo &p);
};
9
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Nội dung
Hàm dựng.
Hàm hủy.
Hàm toán tử.
Bài tập.
10
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm hủy
Vấn đề rò rỉ bộ nhớ (memory leak):
Khi hoạt động, đối tượng có cấp phát bộ nhớ.
Khi hủy đi, bộ nhớ có được thu hồi?
Làm cách nào để thu hồi?
Xây dựng phương thức thu hồi.
Người dùng quên gọi?!
HocSinh
Họ tên
Điểm văn
Điểm toán
Thu hồi
Rò rỉ bộ nhớ!!
Hàm hủy vào cuộc!!
11
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm hủy
Tính chất hàm hủy (destructor):
Tự động thực hiện khi đối tượng bị hủy.
Mỗi lớp có duy nhất một hàm hủy.
Trong C++, hàm hủy có tên ~
class HocSinh
{
private:
char *m_sHoTen;
float m_fDiemVan;
float m_fDiemToan;
public:
~HocSinh() { delete m_sHoTen; }
};
void main()
{
HocSinh h;
HocSinh *p = new HocSinh;
delete p;
}
12
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Nội dung
Hàm dựng.
Hàm hủy.
Hàm toán tử.
Bài tập.
13
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm toán tử
Khái niệm hàm toán tử:
Có thể dùng toán tử đặt tên hàm?
Trong C++, dùng từ khóa operator.
PhanSo operator +(const PhanSo &p1, const PhanSo &p2);
Hệ quả?
Định nghĩa lại cách thực hiện toán tử.
PhanSo p1, p2;
PhanSo p3 = p1 + p2;
Định nghĩa nhiều cách thực hiện khác nhau cho toán tử bằng nạp chồng hàm.
PhanSo operator +(const PhanSo &p, int iNumber);
float opeartor +(const PhanSo &p, float iNumber);
14
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm toán tử
Ưu điểm:
Thực hiện toán tử trên kiểu dữ liệu tự định nghĩa.
PhanSo p1, p2; HocSinh h1, h2;
PhanSo p3 = p1 + p2; if (h1 > h2)
h1++;
Hạn chế:
Không thể tạo toán tử mới.
Không thể định nghĩa lại toán tử trên kiểu cơ bản.
Ngôi của toán tử giữ nguyên.
Độ ưu tiên của toán tử không đổi.
Đôi khi gây nhầm lẫn!!
15
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm toán tử
Phân loại hàm toán tử:
Toán tử độc lập:
Không thuộc lớp nào.
Ngôi của toán tử là số tham số truyền vào.
PhanSo operator +(const PhanSo &p1, const PhanSo &p2);
bool operator >(const PhanSo &p1, const PhanSo &p2);
Toán tử thuộc lớp:
Là phương thức của lớp.
Ngôi của toán tử: đối tượng của lớp + số tham số.
PhanSo PhanSo::operator +(const PhanSo &p);
bool PhanSo::operator >(const PhanSo &p);
Cách sử dụng 2 loại là như nhau!!
16
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm toán tử
Toán tử có thể định nghĩa lại:
17
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm toán tử
Toán tử không thể định nghĩa lại:
18
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm toán tử
Dr. Guru khuyên:
Những lưu ý khi định nghĩa lại toán tử:
Ngôi: số lượng tham số.
Toán hạng: kiểu dữ liệu tham số.
Kết quả: kiểu trả về.
Ví dụ:
Toán tử >.
Toán tử =.
Toán tử [ ].
19
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Tóm tắt
Hàm dựng:
Khởi tạo thông tin ban đầu cho đối tượng.
Tự động thực hiện khi đối tượng được tạo lập.
Mỗi lớp có thể có nhiều hàm dựng.
Hàm hủy:
Dọn dẹp bộ nhớ cho đối tượng.
Tự động thực hiện khi đối tượng bị hủy.
Mỗi lớp có duy nhất một hàm hủy.
20
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Tóm tắt
Hàm toán tử:
Hàm có tên là toán tử.
Dùng định nghĩa lại toán tử.
Ràng buộc:
Ngôi của toán tử giữ nguyên.
Độ ưu tiên của toán tử không đổi.
Không thể tạo toán tử mới.
Không thể định nghĩa lại toán tử cho kiểu cơ bản.
Có 2 loại hàm toán tử:
Toán tử độc lập.
Toán tử thuộc lớp.
21
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Nội dung
Hàm dựng.
Hàm hủy.
Hàm toán tử.
Bài tập.
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 3.1:
Bổ sung vào lớp phân số những phương thức sau:
(Nhóm tạo hủy)
Khởi tạo mặc định phân số = 0.
Khởi tạo với tử và mẫu cho trước.
Khởi tạo với giá trị phân số cho trước.
Khởi tạo từ một phân số khác.
(Nhóm toán tử)
Toán tử số học: +, -, *, /, =, +=, -=.
Toán tử so sánh: >, <, ==, >=, <=, !=.
Toán tử một ngôi: ++, --.
Toán tử ép kiểu: (float), (int).
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 3.2:
Bổ sung vào lớp số phức những phương thức sau:
(Nhóm tạo hủy)
Khởi tạo mặc định số phức = 0.
Khởi tạo với phần thực và phần ảo cho trước.
Khởi tạo với giá trị thực cho trước.
Khởi tạo từ một số phức khác.
(Nhóm toán tử)
Toán tử số học: +, -, *, /, =, +=, -=.
Toán tử so sánh: >, <, ==, >=, <=, !=.
Toán tử một ngôi: ++, --.
Toán tử ép kiểu: (float), (int).
Toán tử nhập, xuất: >>, <<.
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 3.3:
Bổ sung vào lớp đơn thức những phương thức sau:
(Nhóm tạo hủy)
Khởi tạo mặc định đơn thức = 0.
Khởi tạo với hệ số và số mũ cho trước.
Khởi tạo với hệ số cho trước, số mũ = 0.
Khởi tạo từ một đơn thức khác.
(Nhóm toán tử)
Toán tử số học: +, -, *, /, =, +=, -=.
Toán tử so sánh: >, <, ==, >=, <=, !=.
Toán tử một ngôi: ++, --.
Toán tử ép kiểu: (float), (int).
Toán tử nhập, xuất: >>, <<.
25
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 3.4:
Bổ sung vào lớp học sinh những phương thức sau:
(Nhóm tạo hủy)
Khởi tạo với họ tên và điểm văn, toán cho trước.
Khởi tạo với họ tên cho trước, điểm văn, toán = 0.
Khởi tạo từ một học sinh khác.
(Nhóm toán tử)
Toán tử gán: =.
Toán tử so sánh (ĐTB): >, <, ==, >=, <=, !=.
Toán tử nhập, xuất: >>, <<.
26
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 3.5:
Bổ sung vào lớp mảng những phương thức sau:
(Nhóm tạo hủy)
Khởi tạo mặc định mảng kích thước = 0.
Khởi tạo với kích thước cho trước, các phần tử = 0.
Khởi tạo từ một mảng int [ ] với kích thước cho trước.
Khởi tạo từ một đối tượng IntArray khác.
Hủy đối tượng IntArray, thu hồi bộ nhớ.
(Nhóm toán tử)
Toán tử gán: =.
Toán tử mảng: [ ].
Toán tử ép kiểu: (int *).
Toán tử nhập, xuất: >>, <<.
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm dựng,
Hàm hủy,
Hàm toán tử
2
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Nội dung
Hàm dựng.
Hàm hủy.
Hàm toán tử.
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
Hàm dựng.
Hàm hủy.
Hàm toán tử.
Bài tập.
4
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm dựng
Khi đối tượng vừa được tạo:
Giá trị các thuộc tính bằng bao nhiêu?
Đối tượng cần có thông tin ban đầu.
Giải pháp:
Xây dựng phương thức cung cấp thông tin.
Người dùng quên gọi?!
“Làm khai sinh” cho đối tượng!
PhanSo
Tử số??
Mẫu số??
HocSinh
Họ tên??
Điểm văn??
Điểm toán??
Hàm dựng ra đời!!
5
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm dựng
Tính chất hàm dựng (constructor):
Tự động thực hiện khi đối tượng được tạo.
Có thể nạp chồng nhiều hàm dựng.
Trong C++, hàm dựng có tên trùng tên lớp.
class PhanSo
{
private:
int m_iTuSo;
int m_iMauSo;
public:
PhanSo(int iTuSo, int iMauSo);
PhanSo(int iGiaTri);
};
void main()
{
PhanSo p1(1, 2);
PhanSo *p2 = new PhanSo(5);
}
6
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm dựng
Hàm dựng mặc định (default constructor):
Khi lớp không có hàm dựng?
Trình biên dịch cung cấp hàm hựng mặc định.
Tính chất:
Không tham số.
Khởi tạo mặc định các thuộc tính.
class PhanSo
{
private:
int m_iTuSo;
int m_iMauSo;
};
void main()
{
PhanSo p1;
}
7
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm dựng
Hàm dựng sao chép (copy constructor):
Có tham số là đối tượng cùng lớp.
Dùng khởi tạo từ đối tượng cùng loại.
Lớp không có hàm dựng sao chép?
Trình biên dịch cung cấp.
class PhanSo
{
private:
int m_iTuSo;
int m_iMauSo;
public:
PhanSo(const PhanSo &p);
};
void main()
{
PhanSo p1(1, 2);
PhanSo p2(p1);
PhanSo p3 = p2;
}
8
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm dựng
Dr. Guru khuyên:
Một lớp nên có tối thiểu 3 hàm dựng sau:
Hàm dựng mặc định.
Hàm dựng có đầy đủ tham số.
Hàm dựng sao chép.
class PhanSo
{ private:
int m_iTuSo;
int m_iMauSo;
public:
PhanSo();
PhanSo(int iTuSo, int iMauSo);
PhanSo(const PhanSo &p);
};
9
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Nội dung
Hàm dựng.
Hàm hủy.
Hàm toán tử.
Bài tập.
10
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm hủy
Vấn đề rò rỉ bộ nhớ (memory leak):
Khi hoạt động, đối tượng có cấp phát bộ nhớ.
Khi hủy đi, bộ nhớ có được thu hồi?
Làm cách nào để thu hồi?
Xây dựng phương thức thu hồi.
Người dùng quên gọi?!
HocSinh
Họ tên
Điểm văn
Điểm toán
Thu hồi
Rò rỉ bộ nhớ!!
Hàm hủy vào cuộc!!
11
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm hủy
Tính chất hàm hủy (destructor):
Tự động thực hiện khi đối tượng bị hủy.
Mỗi lớp có duy nhất một hàm hủy.
Trong C++, hàm hủy có tên ~
class HocSinh
{
private:
char *m_sHoTen;
float m_fDiemVan;
float m_fDiemToan;
public:
~HocSinh() { delete m_sHoTen; }
};
void main()
{
HocSinh h;
HocSinh *p = new HocSinh;
delete p;
}
12
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Nội dung
Hàm dựng.
Hàm hủy.
Hàm toán tử.
Bài tập.
13
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm toán tử
Khái niệm hàm toán tử:
Có thể dùng toán tử đặt tên hàm?
Trong C++, dùng từ khóa operator.
PhanSo operator +(const PhanSo &p1, const PhanSo &p2);
Hệ quả?
Định nghĩa lại cách thực hiện toán tử.
PhanSo p1, p2;
PhanSo p3 = p1 + p2;
Định nghĩa nhiều cách thực hiện khác nhau cho toán tử bằng nạp chồng hàm.
PhanSo operator +(const PhanSo &p, int iNumber);
float opeartor +(const PhanSo &p, float iNumber);
14
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm toán tử
Ưu điểm:
Thực hiện toán tử trên kiểu dữ liệu tự định nghĩa.
PhanSo p1, p2; HocSinh h1, h2;
PhanSo p3 = p1 + p2; if (h1 > h2)
h1++;
Hạn chế:
Không thể tạo toán tử mới.
Không thể định nghĩa lại toán tử trên kiểu cơ bản.
Ngôi của toán tử giữ nguyên.
Độ ưu tiên của toán tử không đổi.
Đôi khi gây nhầm lẫn!!
15
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm toán tử
Phân loại hàm toán tử:
Toán tử độc lập:
Không thuộc lớp nào.
Ngôi của toán tử là số tham số truyền vào.
PhanSo operator +(const PhanSo &p1, const PhanSo &p2);
bool operator >(const PhanSo &p1, const PhanSo &p2);
Toán tử thuộc lớp:
Là phương thức của lớp.
Ngôi của toán tử: đối tượng của lớp + số tham số.
PhanSo PhanSo::operator +(const PhanSo &p);
bool PhanSo::operator >(const PhanSo &p);
Cách sử dụng 2 loại là như nhau!!
16
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm toán tử
Toán tử có thể định nghĩa lại:
17
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm toán tử
Toán tử không thể định nghĩa lại:
18
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm toán tử
Dr. Guru khuyên:
Những lưu ý khi định nghĩa lại toán tử:
Ngôi: số lượng tham số.
Toán hạng: kiểu dữ liệu tham số.
Kết quả: kiểu trả về.
Ví dụ:
Toán tử >.
Toán tử =.
Toán tử [ ].
19
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Tóm tắt
Hàm dựng:
Khởi tạo thông tin ban đầu cho đối tượng.
Tự động thực hiện khi đối tượng được tạo lập.
Mỗi lớp có thể có nhiều hàm dựng.
Hàm hủy:
Dọn dẹp bộ nhớ cho đối tượng.
Tự động thực hiện khi đối tượng bị hủy.
Mỗi lớp có duy nhất một hàm hủy.
20
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Tóm tắt
Hàm toán tử:
Hàm có tên là toán tử.
Dùng định nghĩa lại toán tử.
Ràng buộc:
Ngôi của toán tử giữ nguyên.
Độ ưu tiên của toán tử không đổi.
Không thể tạo toán tử mới.
Không thể định nghĩa lại toán tử cho kiểu cơ bản.
Có 2 loại hàm toán tử:
Toán tử độc lập.
Toán tử thuộc lớp.
21
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Nội dung
Hàm dựng.
Hàm hủy.
Hàm toán tử.
Bài tập.
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 3.1:
Bổ sung vào lớp phân số những phương thức sau:
(Nhóm tạo hủy)
Khởi tạo mặc định phân số = 0.
Khởi tạo với tử và mẫu cho trước.
Khởi tạo với giá trị phân số cho trước.
Khởi tạo từ một phân số khác.
(Nhóm toán tử)
Toán tử số học: +, -, *, /, =, +=, -=.
Toán tử so sánh: >, <, ==, >=, <=, !=.
Toán tử một ngôi: ++, --.
Toán tử ép kiểu: (float), (int).
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 3.2:
Bổ sung vào lớp số phức những phương thức sau:
(Nhóm tạo hủy)
Khởi tạo mặc định số phức = 0.
Khởi tạo với phần thực và phần ảo cho trước.
Khởi tạo với giá trị thực cho trước.
Khởi tạo từ một số phức khác.
(Nhóm toán tử)
Toán tử số học: +, -, *, /, =, +=, -=.
Toán tử so sánh: >, <, ==, >=, <=, !=.
Toán tử một ngôi: ++, --.
Toán tử ép kiểu: (float), (int).
Toán tử nhập, xuất: >>, <<.
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 3.3:
Bổ sung vào lớp đơn thức những phương thức sau:
(Nhóm tạo hủy)
Khởi tạo mặc định đơn thức = 0.
Khởi tạo với hệ số và số mũ cho trước.
Khởi tạo với hệ số cho trước, số mũ = 0.
Khởi tạo từ một đơn thức khác.
(Nhóm toán tử)
Toán tử số học: +, -, *, /, =, +=, -=.
Toán tử so sánh: >, <, ==, >=, <=, !=.
Toán tử một ngôi: ++, --.
Toán tử ép kiểu: (float), (int).
Toán tử nhập, xuất: >>, <<.
25
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 3.4:
Bổ sung vào lớp học sinh những phương thức sau:
(Nhóm tạo hủy)
Khởi tạo với họ tên và điểm văn, toán cho trước.
Khởi tạo với họ tên cho trước, điểm văn, toán = 0.
Khởi tạo từ một học sinh khác.
(Nhóm toán tử)
Toán tử gán: =.
Toán tử so sánh (ĐTB): >, <, ==, >=, <=, !=.
Toán tử nhập, xuất: >>, <<.
26
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 3.5:
Bổ sung vào lớp mảng những phương thức sau:
(Nhóm tạo hủy)
Khởi tạo mặc định mảng kích thước = 0.
Khởi tạo với kích thước cho trước, các phần tử = 0.
Khởi tạo từ một mảng int [ ] với kích thước cho trước.
Khởi tạo từ một đối tượng IntArray khác.
Hủy đối tượng IntArray, thu hồi bộ nhớ.
(Nhóm toán tử)
Toán tử gán: =.
Toán tử mảng: [ ].
Toán tử ép kiểu: (int *).
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)