OOP 10 constructor destructor and the big three in inheritance

23 117 0
OOP 10 constructor destructor and the big three in inheritance

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Hàm dựng, Hàm hủy, Ba vấn đề trỏ kế thừa Phương pháp lập trình hướng đối tượng Nội dung ◼ ◼ ◼ ◼ Hàm dựng kế thừa Hàm hủy kế thừa Ba vấn đề trỏ kế thừa Bài tập Phương pháp lập trình hướng đối tượng Nội dung ◼ ◼ ◼ ◼ Hàm dựng kế thừa Hàm hủy kế thừa Ba vấn đề trỏ kế thừa Bài tập Phương pháp lập trình hướng đối tượng Hàm dựng kế thừa ◼ Trình tự tạo lập đối tượng kế thừa: Nhà xây từ móng đến mái ◼ Khái niệm định nghĩa từ thấp đến cao ◼ Đối tượng tạo lập từ lõi đến vỏ ◼ Thành phần kế thừa từ lớp sở tạo trước ◼ Đối tượng kế thừa Đối tượng sở Thành phần sở Thành phần Xây móng đến mái Định nghĩa thấp đến cao Phương pháp lập trình hướng đối tượng Tạo lập từ lõi đến vỏ Hàm dựng kế thừa ◼ Thứ tự gọi hàm dựng đối tượng kế thừa: Hàm dựng lớp sở gọi trước ➔ Phần lõi sở tạo trước ◼ Hàm dựng lớp kế thừa gọi sau ➔ Phần vỏ tạo sau ◼ Lớp kế thừa định hàm dựng tạo phần lõi ◼ Không định => hàm dựng mặc định gọi ◼ Phương pháp lập trình hướng đối tượng Hàm dựng kế thừa ◼ Ví dụ: class GiaoVien { private: char *m_strHoTen; float m_fMucLuong; int m_iSoNgayNghi; public: GiaoVien(); GiaoVien(char *strHoTen, float fMucLuong, int iSoNgayNghi); }; Phương pháp lập trình hướng đối tượng class GVCN : public GiaoVien { private: char *m_strLopCN; public: GVCN() GVCN(char *strLopCN); GVCN(char *strHoTen, float fMucLuong, int iSoNgayNghi, char *strLopCN); }; Hàm dựng kế thừa ◼ 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() gọi trước { } Phương pháp lập trình hướng đối tượng Nội dung ◼ ◼ ◼ ◼ Hàm dựng kế thừa Hàm hủy kế thừa Ba vấn đề trỏ kế thừa Bài tập Phương pháp lập trình hướng đối tượng Hàm hủy kế thừa ◼ 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 gọi trước ➔ Phần vỏ bên hủy trước ◼ Hàm hủy lớp kế sở gọi sau ➔ Phần lõi sở hủy sau ◼ Mỗi lớp có hàm hủy Đối tượng kế thừa ➔ Lớp kế thừa không cần Đối tượng sở định hàm hủy sở Thành phần sở ◼ Thành phần Hủy từ vỏ đến lõi Phương pháp lập trình hướng đối tượng Hàm hủy kế thừa ◼ Ví dụ: GiaoVien::~GiaoVien() { delete m_strHoTen; } GVCN::~GVCN() { delete m_strLopCN; } Phương pháp lập trình hướng đối tượng GiaoVien() gọi sau ~GVCN() gọi trước 10 Trình tự gọi hàm tạo, hàm hủy: đơn kế thừa Phương pháp lập trình hướng đối tượng 11 Trình tự gọi hàm tạo, hàm hủy: đa kế thừa Phương pháp lập trình hướng đối tượng 12 Trình tự gọi hàm tạo, hàm hủy: đa kế thừa Cho biết kết chương trình sau: int main(){ C c; return 0; } Phương pháp lập trình hướng đối tượng 13 Nội dung ◼ ◼ ◼ ◼ Hàm dựng kế thừa Hàm hủy kế thừa Ba vấn đề trỏ kế thừa Bài tập Phương pháp lập trình hướng đối tượng 14 Ba vấn đề trỏ kế thừa ◼ Lớp có thuộc tính trỏ? ➔ Phải thêm vào lớp “ba ông lớn”: Hàm hủy ◼ Hàm dựng chép ◼ Toán tử gán ◼ ◼ Lớp kế thừa có thuộc tính trỏ? Phương pháp lập trình hướng đối tượng 15 Ba vấn đề trỏ kế thừa ◼ Ví dụ: class GiaoVien { private: char *m_strHoTen; float m_fMucLuong; int m_iSoNgayNghi; public: GiaoVien(char *strHoTen, float fMucLuong, int iSoNgayNghi); }; Phương pháp lập trình hướng đối tượng class GVCN : public GiaoVien { private: char *m_strLopCN; public: GVCN(char *strHoTen, float fMucLuong, int iSoNgayNghi, char *strLopCN); }; 16 Ba vấn đề trỏ kế thừa ◼ Dr Guru khuyên: (Luật “ba ông lớn” kế thừa) ◼ Lớp kế thừa có thuộc tính trỏ, phải kèm theo: ➢ ➢ ➢ ◼ Hàm hủy: thu hồi nhớ phần vỏ Hàm dựng chép: chép nhớ phần vỏ Toán tử gán: chép nhớ phần vỏ Kích hoạt “ba ông lớn” lớp sở: ➢ ➢ ➢ Hàm hủy: tự động!! Hàm dựng chép: định hàm dựng chép lớp sở Toán tử gán: thực toán tử gán lớp sở trước Phương pháp lập trình hướng đối tượng 17 Tóm tắt ◼ Hàm dựng kế thừa: Đối tượng kế thừa tạo lập từ lõi đến vỏ ◼ Hàm dựng lớp 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 định hàm dựng sở ◼ ◼ Hàm hủy kế thừa: Đối tượng kế thừa 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 sở gọi sau, hủy phần lõi ◼ Phương pháp lập trình hướng đối tượng 18 Tóm tắt ◼ Ba vấn đề trỏ kế thừa: ◼ Lớp kế thừa có thuộc tính trỏ: ➢ ➢ Xây dựng “ba ơng lớn” cho phần vỏ Kích hoạt “ba ơng lớn” phần lõi Phương pháp lập trình hướng đối tượng 19 Nội dung ◼ ◼ ◼ ◼ Hàm dựng kế thừa Hàm hủy kế thừa Ba vấn đề trỏ kế thừa Bài tập Phương pháp lập trình hướng đối tượng 20 Bài tập ◼ Bài tập 10.1: class A { public: A(int iX) { } }; class B: public A { public: B(): A(0) { } B(int iX, int iY): A(iX) { } }; class C: public B { public: C() { } C(int iZ) { } C(int iX, int iY, int iZ): B(iX, iY) { } }; Phương pháp lập trình hướng đối tượng Cho biết thứ tự gọi hàm dựng với: a) void main() { C obj(1, 2, 3); } b) void main() { C obj(4); } c) void main() { C obj; } 21 Bài tập ◼ Bài tập 10.2: class GiaoVien { private: char *m_strHoTen; float m_fMucLuong; int m_iSoNgayNghi; public: float TinhLuong() { return m_fMucLuong – m_iSoNgayNghi * 10000; } }; class GVCN: public GiaoVien { private: char *m_strLopCN; }; Phương pháp lập trình hướng đối tượng 22 Bài tập ◼ 29/9/2017 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ỉ - Họ tên, mức lương cho trước, số nghày nghỉ - 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ỉ - Họ tên, mức lương, lớp chủ nhiệm cho trước, số ngày nghỉ - Họ tên, mức lương, số ngày nghỉ, lớp chủ nhiệm cho trước Giải vấn đề trỏ cho hai lớp đối tượng Phương pháp lập trình hướng đối tượng 23 ... tập 10. 1: class A { public: A(int iX) { } }; class B: public A { public: B(): A(0) { } B(int iX, int iY): A(iX) { } }; class C: public B { public: C() { } C(int iZ) { } C(int iX, int iY, int... a) void main() { C obj(1, 2, 3); } b) void main() { C obj(4); } c) void main() { C obj; } 21 Bài tập ◼ Bài tập 10. 2: class GiaoVien { private: char *m_strHoTen; float m_fMucLuong; int m_iSoNgayNghi;... hướng đối tượng 12 Trình tự gọi hàm tạo, hàm hủy: đa kế thừa Cho biết kết chương trình sau: int main(){ C c; return 0; } Phương pháp lập trình hướng đối tượng 13 Nội dung ◼ ◼ ◼ ◼ Hàm dựng kế

Ngày đăng: 03/11/2019, 19:28