Bài giảng Phương pháp lập trình hướng đối tượng - Tuần 10: Hàm dựng, Hàm hủy, Ba vấn đề con trỏ trong kế thừa - Nguyễn Lê Hoàng Dũng

Hàm dựng, Hàm hủy,  
Ba vấn đề con trỏ  
trong kế thừa  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
1
Nội dung  
n Hàm dựng trong kế thừa.  
n Hàm hủy trong kế thừa.  
n Ba vấn đề về con trỏ trong kế thừa.  
n Bài tập.  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
2
Nội dung  
n Hàm dựng trong kế thừa.  
n Hàm hủy trong kế thừa.  
n Ba vấn đề về con trỏ trong kế thừa.  
n Bài tập.  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
3
Hàm dựng trong kế thừa  
n Trình tự tạo lập đối tượng kế thừa:  
Nhà được xây từ móng đến mái.  
Khái niệm được định nghĩa từ thấp đến cao.  
Đối tượng được tạo lập từ lõi đến vỏ.  
Thành phần kế thừa từ lớp cơ sở được tạo trước.  
Đối tượng kế thừa  
Đối tượng cơ sở  
Thành phần cơ sở  
Thành phần mới  
Xây móng đến mái  
Định nghĩa thấp đến cao  
Tạo lập từ lõi đến vỏ  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
4
Hàm dựng trong kế thừa  
n Thứ tự gọi hàm dựng ở đối tượng kế thừa:  
Hàm dựng lớp cơ sở được gọi trước.  
è Phần lõi cơ sở được tạo trước.  
Hàm dựng lớp kế thừa gọi sau.  
è Phần vỏ mới được tạo sau.  
Lớp kế thừa có thể chỉ định hàm dựng tạo phần lõi.  
Không chỉ định => hàm dựng mặc định được gọi.  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
5
Hàm dựng trong kế thừa  
n Ví dụ:  
class GiaoVien  
{
class GVCN : public GiaoVien  
{
private:  
char  
private:  
*m_strHoTen;  
m_fMucLuong;  
m_iSoNgayNghi;  
char  
public:  
GVCN()  
*m_strLopCN;  
float  
int  
GVCN(char *strLopCN);  
GVCN(char *strHoTen,  
float fMucLuong,  
public:  
GiaoVien();  
GiaoVien(char *strHoTen,  
float fMucLuong,  
int iSoNgayNghi);  
int iSoNgayNghi,  
char *strLopCN);  
};  
};  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
6
Hàm dựng trong kế thừa  
n Ví dụ:  
GVCN::GVCN(char *strLopCN: GiaoVien(“Minh”, 500000, 0)  
{
m_strLopCN = new char[strlen(strLopCN) + 1];  
strcpy(m_strLopCN, strLopCN);  
}
GVCN::GVCN(char *strHoTen, float fMucLuong, int iSoNgayNghi,  
char *strLopCN: GiaoVien(strHoTen, fMucLuong, iSoNgayNghi)  
{
m_strLopCN = new char[strlen(strLopCN) + 1];  
strcpy(m_strLopCN, strLopCN);  
}
GVCN::GVCN()  
{
GiaoVien() được gọi trước  
}
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
7
Nội dung  
n Hàm dựng trong kế thừa.  
n Hàm hủy trong kế thừa.  
n Ba vấn đề về con trỏ trong kế thừa.  
n Bài tập.  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
8
Hàm hủy trong kế thừa  
n Trình tự hủy đối tượng kế thừa:  
Ngược lại với trình tự tạo lập.  
Hàm hủy lớp kế thừa được gọi trước.  
è Phần vỏ bên ngoài được hủy trước.  
Hàm hủy lớp kế cơ sở được gọi sau.  
è Phần lõi cơ sở được hủy sau.  
Mỗi lớp chỉ có một hàm hủy  
Đối tượng kế thừa  
è Lớp kế thừa không cần  
Đối tượng cơ sở  
Thành phần cơ sở  
Thành phần mới  
chỉ định hàm hủy cơ sở.  
Hủy từ vỏ đến lõi  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
9
Hàm hủy trong kế thừa  
n Ví dụ:  
GiaoVien::~GiaoVien()  
{
GiaoVien() được gọi sau  
delete m_strHoTen;  
}
GVCN::~GVCN()  
{
~GVCN() được gọi trước  
delete m_strLopCN;  
}
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
10  
Nội dung  
n Hàm dựng trong kế thừa.  
n Hàm hủy trong kế thừa.  
n Ba vấn đề về con trỏ trong kế thừa.  
n Bài tập.  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
11  
Ba vấn đề con trỏ trong kế thừa  
n Lớp có thuộc tính con trỏ?  
è Phải thêm vào lớp “ba ông lớn”:  
Hàm hủy.  
Hàm dựng sao chép.  
Toán tử gán.  
n Lớp kế thừa có thuộc tính con trỏ?  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
12  
Ba vấn đề con trỏ trong kế thừa  
n Ví dụ:  
class GiaoVien  
{
class GVCN : public GiaoVien  
{
private:  
char  
private:  
char  
public:  
*m_strHoTen;  
m_fMucLuong;  
m_iSoNgayNghi;  
*m_strLopCN;  
float  
GVCN(char *strHoTen,  
float fMucLuong,  
int iSoNgayNghi,  
char *strLopCN);  
int  
public:  
GiaoVien(char *strHoTen,  
float fMucLuong,  
};  
int iSoNgayNghi);  
};  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
13  
Ba vấn đề con trỏ trong kế thừa  
n Dr. Guru khuyên:  
(Luật “ba ông lớn” trong kế thừa)  
Lớp kế thừa có thuộc tính con trỏ, phải kèm theo:  
Ø Hàm hủy: thu hồi bộ nhớ phần v.  
Ø Hàm dựng sao chép: sao chép bộ nhớ phần v.  
Ø Toán tử gán: sao chép bộ nhớ phần v.  
Kích hoạt “ba ông lớn” của lớp cơ
Ø Hàm hủy: tự động!!.  
Ø Hàm dựng sao chép: chỉ định  
hàm dựng sao chép lớp cơ sở.  
Ø Toán tử gán: thực hiện toán tử gán  
lớp cơ sở trước.  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
14  
Tóm tắt  
n Hàm dựng trong kế thừa:  
Đối tượng kế thừa được tạo lập từ lõi đến vỏ.  
Hàm dựng lớp cơ sở gọi trước, tạo phần lõi.  
Hàm dựng lớp kế thừa gọi sau, tạo phần vỏ.  
Lớp kế thừa có thể chỉ định hàm dựng cơ sở.  
n Hàm hủy trong kế thừa:  
Đối tượng kế thừa được hủy ngược lại với tạo lập.  
Hàm hủy lớp kế thừa gọi trước, hủy phần vỏ.  
Hàm hủy lớp cơ sở gọi sau, hủy phần lõi.  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
15  
Tóm tắt  
n Ba vấn đề con trỏ trong kế thừa:  
Lớp kế thừa có thuộc tính con trỏ:  
Ø Xây dựng “ba ông lớn” cho phần vỏ.  
Ø Kích hoạt “ba ông lớn” của phần lõi.  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
16  
Nội dung  
n Hàm dựng trong kế thừa.  
n Hàm hủy trong kế thừa.  
n Ba vấn đề về con trỏ trong kế thừa.  
n Bài tập.  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
17  
Bài tập  
n Bàtập 10.1:  
class A  
{ public:  
Aini) { }  
};  
Chbiếthứ tự gọhàm dựnv:  
a) void main() { C o(1, 2, 3); }  
b) void main() { C o(4);  
c) void main() { C o;  
}
}
class B: public A  
{ public:  
B(): A(0) { }  
Biniini): Ai) { }  
};  
class C: public B  
{ public:  
C() { }  
Cini) { }  
Ciniiniini): Bii) { }  
};  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
18  
Bài tập  
n Bài tập 10.2:  
class GiaoVien  
{
private:  
char  
float  
int  
*m_strHoTen;  
m_fMucLuong;  
m_iSoNgayNghi;  
public:  
float TinhLuong() { return m_fMucLuonm_iSoNgayNghi * 10000; }  
};  
class GVCN: public GiaoVien  
{
private:  
char  
*m_strLopCN;  
};  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
19  
Bài tập  
n Bài tập 10.2:  
Xây dựng hàm dựng cho lớp GiaoVien, khởi tạo với:  
Họ tên cho trước, mức lương 500000, số ngày nghỉ 0.  
Họ tên, mức lương cho trước, số nghày nghỉ 0.  
Họ tên, mức lương, số ngày nghỉ cho trước.  
Xây dựng hàm dựng cho lớp GVCN, khởi tạo với:  
Họ tên, lớp chủ nhiệm cho trước, mức lương 500000, số ngày nghỉ 0.  
Họ tên, mức lương, lớp chủ nhiệm cho trước, số ngày nghỉ 0.  
Họ tên, mức lương, số ngày nghỉ, lớp chủ nhiệm cho trước.  
Giải quyết 3 vấn đề con trỏ cho hai lớp đối tượng.  
Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy  
20  
Tải về để xem bản đầy đủ
pdf 22 trang myanh 23280 Free
Bạn đang xem 20 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 - Tuần 10: Hàm dựng, Hàm hủy, Ba vấn đề con trỏ trong kế thừa - Nguyễn Lê Hoàng Dũng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_phuong_phap_lap_trinh_huong_doi_tuong_tuan_10_ham.pdf
  • zipOOP-W10-Demo.zip