Lập trình hướng đối tượng tren C/C++ - OOP 08 object life cycle in inheritance
Vòng đ i đ i tư ng k th a GV Nguy n Minh Huy Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy N i dung Kh i t o k th a a H y k th a a V n đ tr k th a a Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy N i dung Kh i t o k th a a H y k th a a V n đ tr k th a a Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy Kh i t o 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 s đư c t o trư c Đ i tư ng k th a Đ i tư ng s Thành ph n s Thành ph n m i 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 - Nguy n Minh Huy T o l p t lõi đ n v Kh i t o k th a Th t kh i t o đ i tư ng k th a: a: Phương th c kh i t o l p s đư c g i trư c c Ph n lõi s đư c t o trư c c Phương th c kh i t o l p k th a g i sau sau Ph n v m i đư c t o sau sau L p k th a có th l a ch n cách t o ph n lõi lõi Ch đ nh phương th c kh i t o l p s Không ch đ nh: kh i t o m c đ nh đư c g i Khơng nh: i Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy Kh i t o k th a Ví d : class GiaoVien { private: char *m_hoTen; m_hoTen; float m_mucLuong; m_mucLuong; int m_ngayNghi; m_ngayNghi; public: GiaoVien(); GiaoVien(); GiaoVien(char *hoTen, GiaoVien(char *hoTen, float mucLuong, mucLuong, int ngayNghi); ngayNghi); }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy class GVCN : public GiaoVien { private: char *m_lopCN; m_lopCN; public: GVCN(); GVCN(char *lopCN); *lopCN); GVCN(char *hoTen, *hoTen, float mucLuong, mucLuong, int ngayNghi, ngayNghi, char *lopCN); *lopCN); }; Kh i t o k th a Ví d : GVCN::GVCN(char *lopCN) : GiaoVien(“Minh”, 500000, 0) lopCN) GiaoVien(“Minh”, 0) { m_lopCN = new char[strlen(lopCN) + 1]; char[strlen(lopCN) 1]; strcpy(m_lopCN, lopCN); strcpy(m_lopCN, lopCN); } GVCN::GVCN(char hoTen, GVCN::GVCN(char *hoTen, float mucLuong, int ngayNghi, char *lopCN) mucLuong, ngayNghi, *lopCN) : GiaoVien(hoTen, mucLuong, ngayNghi) GiaoVien(hoTen, mucLuong, ngayNghi) { m_lopCN = new char[strlen(lopCN) + 1]; char[strlen(lopCN) 1]; strcpy(m_lopCN, lopCN); strcpy(m_lopCN, lopCN); } GVCN::GVCN() GVCN::GVCN() GiaoVien() đư c g i trư c { } Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy N i dung Kh i t o k th a a H y k th a a V n đ tr k th a a Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy H y k th a Trình t h y đ i tư ng k th a: a: Ngư c l i v i trình t t o l p p Phương th c h y l p k th a đư c g i trư c c Ph n v bên đư c h y trư c c Phương th c h y l p k s đư c g i sau sau Ph n lõi s đư c h y sau sau M i l p ch có m t cách h y Đ i tư ng k th L p k th a không c n Đ i tư ng s ch đ nh cách h y l p s a Thành ph n s Thành ph n m i H y t v đ n lõi Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy H y k th a Ví d : GiaoVien::~GiaoVien() GiaoVien::~GiaoVien() { delete m_hoTen; m_hoTen; } GVCN::~GVCN() GVCN::~GVCN() { delete m_lopCN; m_lopCN; } ~GiaoVien() đư c g i sau ~GVCN() đư c g i trư c Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 10 N i dung Kh i t o k th a a H y k th a a V n đ tr k th a a Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 11 V n đ tr k th a Lu t “ba ơng l n”: n” L p có thu c tính tr ? Ph i t thêm vào l p “ba ông l n”: n” Phương th c h y y Phương th c kh i t o chép chép Toán t gán 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 - Nguy n Minh Huy 12 V n đ tr k th a Dr Guru khuyên: khuyên: (Lu t “ba ông l n” k th a) n” a) L p k th a có thu c tính tr : Trang b “ba ông l n” cho l p k th a n” a Kích ho t “ba ông l n” c a l p s t n” c a l p k th a a Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy “ba ông l n” n” 13 V n đ tr k th a Ví d : class A { public: A(const A &a); A& operator =(const A &a); virtual ~A(); }; class B: public A { public: B(const B &b); B& operator =(const B &b); ~B(); }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy B::B(const B &b) : A(b) { // Cài đ t kh i t o chép B } B& operator =(const B &b) { A::operator =(b); // Cài đ t toán t = cho B } ~B() // T { } đ ng g i ~A() 14 Tóm t t Kh i t o k th a: a: Kh i t o t lõi đ n v T o lõi: phương th c kh i t o l p s g i trư c lõi: c T o v : phương th c kh i t o l p k th a g i sau, sau, Có th ch đ nh phương th c kh i t o l p s H y k th a: a: H y t v vào lõi lõi H y lõi: phương th c h y l p k th a lõi: a H y v : phương th c h y l p s Lu t “ba ông l n” k th a n” a Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 15 Bài t p Bài t p 8.1: class A { public: A(int iX) { } A(int iX) }; class B: public A { public: B(): A(0) { } B(int iX, int iY): A(iX) { } B(int iX, iY): A(iX) }; class C: public B { public: C() { } C(int iZ) { } C(int iZ) C(int iX, int iY, int iZ): B(iX, iY) { } C(int iX, iY, iZ): B(iX, iY) }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy Cho bi t th t g i hàm d ng v a) void main() { C obj(1, 2, 3); obj(1, b) void main() { C obj(4); obj(4); c) void main() { C obj; obj; i: i: } } } 16 Bài t p Bài t p 8.2: Gi i quy t ba v n đ tr cho l p GiaoVien GVCN Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 17 Bài t p Bài t p 8.3: class X { }; class Y: public X { public: Y(int i) { } Y(int Y(const Y &obj) { } &obj) }; class Z: public Y { public: Z(int i): Y(i++) { } Z(int Y(i }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy Cho bi t th t g i hàm d ng v i: i: a) void main() { Z obj(5); } obj(5); b) void main() { Y obj1(6); Y obj2(obj1); } c) void main() { Z obj1(7); Z obj2(obj1); } 18 Bài t p Bài t p 8.4: Hãy v k th a cho nh ng l p đ i tư ng hình h c: c: (có th phát sinh thêm nh ng l p s c n thi t) t) - Vuông Vng - Tam giác vng vng - Trịn Trịn - Tam giác cân cân - Ellipse - Tam giác vuông cân cân - Ch nh t t - Tam giác đ u u - Thoi Thoi - Bình hành hành - Thang vuông vuông - Thang cân cân Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 19 Bài t p Bài t p 8.5: M t r p chi u phim có M hàng gh , m i hàng gh có N gh Giá vé đư c tính theo v trí ng i cho xa hàng gh trung tâm (c trư c l n sau) giá vé r , xa m t hàng gh gi m 3000 sau) Có lo i r p: p: - R p thư ng: giá vé hàng gh trung tâm 80000 ng: - R p cao c p: giá vé hàng gh trung tâm 120000, p: r p có khuy n gi m 20% giá vé vào ngày th năm hàng tu n 20% n Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 20 Bài t p Bài t p 8.5: Hãy xây d ng l p RapThuong RapCaoCap, cho phép: RapCaoCap, phép: - Kh i t o r p phim v i s lương gh M x N cho trư c c - Đ t vé t i m t v trí gh đó - Cho bi t giá vé t i m t v trí gh đó - Cho bi t m t v trí gh cịn tr ng khơng khơng - Cho bi t s gh cịn tr ng r p p - Tính t ng s ti n vé bán đư c c Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 21 ... th phát sinh thêm nh ng l p s c n thi t) t) - Vuông Vuông - Tam giác vng vng - Trịn Trịn - Tam giác cân cân - Ellipse - Tam giác vuông cân cân - Ch nh t t - Tam giác đ u u - Thoi Thoi - Bình hành... C(int iZ) { } C(int iZ) C(int iX, int iY, int iZ): B(iX, iY) { } C(int iX, iY, iZ): B(iX, iY) }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy Cho bi t th t g i hàm d ng v a) void main()... l p trình hư ng đ i tư ng - Nguy n Minh Huy 15 Bài t p Bài t p 8.1: class A { public: A(int iX) { } A(int iX) }; class B: public A { public: B(): A(0) { } B(int iX, int iY): A(iX) { } B(int iX,