Lập trình hướng đối tượng C/C++ -OOP 03 object life cycle
Vòng đ i đ i tư ng 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 Phương th c kh i t o o Phương th c h y y Thành ph n tĩnh tĩnh Class Template Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy N i dung Phương th c kh i t o o Phương th c h y y Thành ph n tĩnh tĩnh Class Template Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy Phương th c kh i t o V n đ kh i t o thông tin đ i tư ng: ng: Giá tr ban đ u c a thu c tính? tính? class PhanSo { private: int m_tu; m_tu; int m_mau; m_mau; }; void main() main() { PhanSo p; // Giá tr c a p?? } Kh i t o b ng phương th c truy xu t t class PhanSo { public: void ganTu(int tu); ganTu( tu); void ganMau(int mau); ganMau( mau); }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy void main() main() { PhanSo p; p.ganTu(1); p.ganTu(1); p.ganMau(3); p.ganMau(3); } Phương th c kh i t o V n đ kh i t o thông tin đ i tư ng: ng: Như c m c a phương th c truy xu t: t: Vi ph m “tính ch t h p đen” đen” Ngư i dùng quên g i i “Làm khai sinh” cho đ i tư ng sinh” ng Phương th c kh i t o o Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy Phương th c kh i t o Tính ch t phương th c kh i t o: o: B t bu c g i khai báo đ i tư ng ng Có th n p ch ng nhi u phương th c c Khơng có giá tr tr v Có tên trùng tên l p (trong C++) class PhanSo { private: int m_tu; m_tu; int m_mau; m_mau; public: PhanSo( tu, PhanSo(int tu, int mau); mau); PhanSo( giaTri); PhanSo(int giaTri); }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy void main() main() { PhanSo p1(1, 2); 2); PhanSo p2(1, 3); PhanSo *p3 = new PhanSo(2, 3); PhanSo(2, 3); }s Phương th c kh i t o Phương th c kh i t o m c đ nh: nh: “Làm khai sinh” m c đ nh cho đ i tư ng sinh” ng Khơng có tham s N u l p khơng có phương th c kh i t o o Trình biên d ch t c p p class PhanSo { private: int m_tuSo; m_tuSo; int m_mauSo; m_mauSo; public: PhanSo(); PhanSo(); }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy void main() main() { PhanSo p; PhanSo *q = new PhanSo; PhanSo; } Phương th c kh i t o Phương th c kh i t o chép: chép: “Làm khai sinh” b ng chép đ i tư ng khác sinh” khác Tham s đ i tư ng l p p Luôn t n t i l p (trình biên d ch c p) p) class PhanSo { private: int m_tuSo; m_tuSo; int m_mauSo; m_mauSo; public: PhanSo(const PhanSo(const PhanSo &p); }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy void main() main() { PhanSo p1(1, 2); 2); PhanSo p2(p1); p2(p1); PhanSo p3 = p2; p2; } Phương th c kh i t o Dr Guru khuyên: khuyên: M t l p nên có t i thi u phương th c kh i t o: o: Kh i t o m c đ nh nh Kh i t o chép chép Kh i t o v i đ y đ thông tin class PhanSo { private: int m_tu; m_tu; int m_mau; m_mau; public: PhanSo(); PhanSo(); PhanSo(const PhanSo(const PhanSo &p); PhanSo( tu, PhanSo(int tu, int mau); mau); }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy N i dung Phương th c kh i t o o Phương th c h y y Thành ph n tĩnh tĩnh Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 10 Phương th c h y V n đ rò r b nh (memory leak): B nh c p cho tr không t đư c thu h i i Làm thu h i? i? Xây d ng phương th c thu h i i Ngư i dùng quên g i i “Làm di chúc” cho đ i tư ng chúc” ng Phương th c h y y class HocSinh { private: char *m_hoTen; m_hoTen; public: void thuHoiBoNho() { thuHoiBoNho() delete m_hoTen; } m_hoTen; }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy HocSinh H tên Đi m văn Đi m toán void main() main() { HocSinh h; h.thuHoiBoNho(); h.thuHoiBoNho(); } 11 Phương th c h y Tính ch t phương th c h y: y: T đ ng g i đ i tư ng b h y y Duy nh t cho m i l p p Có tên ~ (trong C++) ~ class HocSinh { private: char *m_hoTen; m_hoTen; float m_diemVan; m_diemVan; float m_diemToan; m_diemToan; public: ~HocSinh() { delete m_hoTen; } HocSinh() m_hoTen; }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy void main() main() { HocSinh h; HocSinh *p = new HocSinh; HocSinh; delete p; } 12 N i dung Phương th c kh i t o o Phương th c h y y Thành ph n tĩnh tĩnh Class Template Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 13 Thành ph n tĩnh Chia s gi a đ i tư ng l p: p: M i đ i tư ng có b n riêng: riêng: Thu c tính tính Phương th c c PhanSo Thành ph n đ i tư ng ng Mu n dùng chung thông tin? Thành ph n tĩnh tĩnh T s M us Rút g n() p1: PhanSo T s :1 M us :2 Rút g n() Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy p2: PhanSo T s :1 M us :3 Rút g n() 14 Thành ph n tĩnh Tính ch t thành ph n tĩnh: tĩnh: Thu c tính, phương th c thu c ph m vi l p tính, p Dùng chung cho m i đ i tư ng c a l p p Khai báo b ng t khóa “static” (trong C++) (trong Truy xu t b ng toán t :: (trong C++) (trong class PhanSo { private: static public: static private: int int }; PhanSo::m_giaTriLN PhanSo::m_giaTriLN = 10000; int m_giaTriLN; m_giaTriLN; int layGiaTriLN(); layGiaTriLN(); void main() main() { int x = PhanSo::layGiaTriLN(); PhanSo::layGiaTriLN(); } m_tu; m_tu; m_mau; m_mau; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 15 N i dung Phương th c kh i t o o Phương th c h y y Thành ph n tĩnh tĩnh Class Template Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 16 Class Template Xét l p m ng: ng: Các ph n t s nguyên nguyên T ng quát: ph n t ki u b t kỳ quát: kỳ Tham s hóa thu c tính, phương th c tính, c Class Template Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 17 Class Template Cách s d ng Class Template: template class Mang { private: int m_kichThuoc; m_kichThuoc; T *m_duLieu; m_duLieu; public: Mang( kichThuoc); Mang(int kichThuoc); T layPhanTu(int viTri); layPhanTu( viTri); }; Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy void main() { Mang Mang m1(10); int a = m1.layPhanTu(5); Mang Mang m2(5); PhanSo p = m2.layPhanTu(2); } 18 Tóm t t Phương th c kh i t o: o: “Làm khai sinh” cho đ i tư ng sinh” ng B t bu c g i khai báo báo Có th n p ch ng ng Phương th c h y: y: “Làm di chúc” cho đ i tư ng chúc” ng T đ ng g i h y y Có nh t m t t Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 19 Tóm t t Thành ph n tĩnh: tĩnh: Dùng chung cho đ i tư ng c a l p p Khai báo b ng t khóa “static” Truy xu t b ng tốn t :: Class Template: Tham s hóa ki u d li u thu c tính tính Lưu tr x lý t ng quát nhi u ki u u 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 3.1: Trang b cho l Kh i t Kh i t Kh i t Kh i t p phân s nh ng cách kh i t o sau: sau: o m c đ nh phân s = o v i t m u cho trư c c o t giá tr nguyên cho trư c c o t m t phân s khác khác Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 21 Bài t p Bài t p 3.2: Trang b cho l p h c sinh nh ng cách kh i t o h y sau: sau: Kh i t o v i h tên m văn, toán cho trư c văn, c Kh i t o v i h tên cho trư c, m văn, toán = c, văn, Kh i t o t m t h c sinh khác khác H y đ i tư ng h c sinh, thu h i b nh sinh, Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 22 Bài t p Bài t p 3.3: Trang b cho l p m ng s nguyên nh ng cách kh i t o h y sau: sau: Kh i t o m c đ nh m ng kích thư c = Kh i t o v i kích thư c cho trư c, ph n t = c, Kh i t o t m t m ng int [ ] v i kích thư c cho trư c c Kh i t o t m t đ i tư ng m ng khác khác H y đ i tư ng m ng, thu h i b nh ng, Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 23 Bài t p Bài t p 3.4: Trang b cho l p phân s nh ng phương th c sau: sau: Đ m s lư ng phân s đư c t o ra T o tr v phân s v i t m u cho trư c c Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 24 Bài t p Bài t p 3.5: Xây d ng l p m ng ki u d li u b t kỳ kỳ Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy 25 ... Template Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy N i dung Phương th c kh i t o o Phương th c h y y Thành ph n tĩnh tĩnh Class Template Phương pháp l p trình hư ng đ i tư ng - Nguy... khơng có phương th c kh i t o o Trình biên d ch t c p p class PhanSo { private: int m_tuSo; m_tuSo; int m_mauSo; m_mauSo; public: PhanSo(); PhanSo(); }; Phương pháp l p trình hư ng đ i tư ng - Nguy... Luôn t n t i l p (trình biên d ch c p) p) class PhanSo { private: int m_tuSo; m_tuSo; int m_mauSo; m_mauSo; public: PhanSo(const PhanSo(const PhanSo &p); }; Phương pháp l p trình hư ng đ i tư