Bài giảng Phương pháp lập trình hướng đối tượng - Tuần 07: Hàm dựng, Hàm hủy, Ba vấn đề con trỏ trong kế thừa - Phạm Tú San

Tuần 07:  
Hàm dꢀng, Hàm hꢁy,  
Ba vꢂn đꢃ con trꢄ trong kꢅ thꢆa  
QUAN HỆ GIỮA CÁC ĐỐI TƯỢNG  
Liên hꢀ giꢁa các lꢂp đꢃi tưꢄng (chương 6)  
Quan hệ bao hàm (HAS-A)  
Bao hàm phụ thuộc (composition)  
Bao hàm độc lập (aggregation)  
Tổng quát hóa (IS-A)  
Friend  
Quan hệ phụ thuộc  
Nꢅi dung  
Hàm dựng trong kế thừa.  
Hàm hủy trong kế thừa.  
Ba vấn đề về con trỏ trong kế thừa.  
Bài tập.  
4
Hàm dꢆng trong kꢇ thꢈa  
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  
Tạo lập từ lõi đến vỏ  
Hàm dꢆng trong kꢇ thꢈa  
Khi một đối tượng thuộc lớp con được gọi:  
Hàm dựng của lớp cha sẽ tự động được gọi thực  
hiện trước  
Sau đó, hàm dựng của lớp con sẽ được thực hiện.  
Trong hàm dựng của lớp con, chúng ta có thể chỉ  
định hàm dựng nào của lớp cha sẽ được gọi thực  
hiện. Nếu không, hàm dựng mặc định của lớp cha  
sẽ được gọi  
GVCN gv();  
//Hàm dựng GiaoVien() sẽ được gọi trước  
//Sau đó tới hàm GVCN()  
6
Ví dꢉ hàm dꢆng trong kꢇ thꢈa  
class GiaoVien  
{
class GVCN : public GiaoVien  
{
private:  
string  
float  
public:  
GiaoVien();  
GiaoVien(string sHoTen,float  
fMucLuong);  
};  
private:  
mHoTen;  
mMucLuong;  
string  
public:  
GVCN();  
mLopCN;  
GVCN(string ten, float luong,  
string lopcn);  
};  
Ví dꢉ hàm dꢆng trong kꢇ thꢈa  
GiaoVien::GiaoVien()  
//1  
GVCN::GVCN() //3  
{
{
mHoTen = “”;  
mLopCN = “”;  
mMucLuong = 0;  
}
}
GVCN::GVCN(string ten, float luong,  
GiaoVien::GiaoVien(string ten, float  
string lopcn): GiaoVien(ten, luong)  
luong) //2  
//4  
{
{
mHoTen = ten;  
mMucLuong = luong;  
}
mLopCN = lopcn;  
}
GVCN gv1;  
//Hàm GiaoVien() sẽ được gọi  
trước  
GVCN gv2(“Nguyen A”, 50, “11A”);  
//Hàm dựng GiaoVien(“Nguyen A”, 50,) sẽ được  
gọi trước  
Hàm dꢆng trong lꢂp dꢊn xuꢋt  
Lưu ý:  
A
B
C
Hàm dựng của lớp dẫn xuất chỉ  
được phép chỉ định hàm dựng  
nào của lớp cơ sở trực tiếp của  
nó thực hiện chứ không thể can  
thiệp đến các lớp cơ sở kế thừa  
xa hơn.  
X
Nꢅi dung  
Hàm dựng trong kế thừa.  
Hàm hủy trong kế thừa.  
Ba vấn đề về con trỏ trong kế thừa.  
Bài tập.  
10  
Hàm hꢌy trong kꢇ thꢈa  
Thứ tự huỷ đối tượng kế thừa  
Ngược lại với quá trình tạo  
Phần vỏ bên ngoài được huỷ trước  
Lớp con sẽ bị huỷ trước lớp cha  
Mỗi lớp chỉ có 1 hàm huỷ -> không cần chỉ định  
Đối tượng kế thừa  
Đối tượng cơ sở  
Thành phần cơ sở  
Thành phần mới  
Hủy từ vỏ đến lõi  
11  
Hàm hꢌy trong kꢇ thꢈa  
Khi một đối tượng thuộc lớp con bị hủy:  
Hàm hủy của lớp con được gọi thực hiện trước  
Sau đó mới đến hàm hủy của lớp cha.  
GiaoVien::~GiaoVien()  
{
//huỷ giáo viên  
~GiaoVien() được gọi sau  
~GVCN() được gọi trước  
}
GVCN::~GVCN()  
{
//huỷ GVCN  
}
void main()  
{
GVCN a;  
}
1
Nꢅi dung  
Hàm dựng trong kế thừa.  
Hàm hủy trong kế thừa.  
Ba vấn đề về con trỏ trong kế thừa.  
Bài tập.  
13  
Ba vꢋn đꢍ con trꢎ trong kꢇ thꢈa  
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.  
Lớp kế thừa có thuộc tính con trỏ?  
14  
Ba vꢋn đꢍ con trꢎ trong kꢇ thꢈa  
class GiaoVien  
{
class GVCN : public GiaoVien  
{
private:  
private:  
char  
*m_strHoTen;  
m_fMucLuong;  
m_iSoNgayNghi;  
float  
int  
char  
public:  
GVCN(char *strHoTen,  
float fMucLuong,  
*m_strLopCN;  
public:  
GiaoVien(char *strHoTen,  
float fMucLuong,  
int iSoNgayNghi,  
char *strLopCN);  
};  
int iSoNgayNghi);  
};  
15  
Ba vꢋn đꢍ con trꢎ trong kꢇ thꢈa  
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ơ sở:  
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.  
16  
Hàm dꢆng sao chép  
GVCN::GVCN( const GVCN &g): GiaoVien( g )  
{
m_strLopCN = new char[strlen(g.strLopCN) + 1];  
strcpy(m_strLopCN, g.strLopCN);  
}
Toán tꢏ gán trong kꢇ thꢈa  
Toán tử gán cho lớp con  
Gọi toán tử gán của lớp cha  
Gán các thành phần riêng của lớp con  
Toán tꢏ gán trong kꢇ thꢈa – lꢂp chꢐa con trꢎ  
B& B::operator=(const B& src)  
{
if (this == &src)  
return *this;  
A
B
A::operator=(src);  
delete [] this->ptr;  
this->iSize = src.iSize;  
ptr = new int [this->iSize];  
for (int i=0; i<this->iSize; ++i)  
this->ptr[i] = src.ptr[i];  
return *this;  
}
Tóm tꢑt  
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ở.  
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.  
20  
Tải về để xem bản đầy đủ
pdf 55 trang baolam 26820 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 07: Hàm dựng, Hàm hủy, Ba vấn đề con trỏ trong kế thừa - Phạm Tú San", để 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_07_ham.pdf