Lập trình hướng đối tượng C/C++ -OOP 05 the law of the big three
Ba v n đ tr 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 Ba v n đ tr Phương pháp l p trình hư ng đ i tư ng - Nguy n Minh Huy The Law of The Big Three Ví d 1: class Array { private: int m_size; int *m_data; public: Array(int size); }; Array::Array(int size) { m_size = size; m_data = new int[m_size]; } Phương pháp l p trình hư ng đ i tư ng – GV Nguy n Minh Huy void main() { Array a1(5); } The Law of The Big Three V n đ rị r b nh : L p có thu c tính tr Đ i tư ng c a l p b h y, b nh không thu h i a1: Array m_size m_data Rò r b nh !! 101 Ph i dùng hàm h y đ d n d p!! Phương pháp l p trình hư ng đ i tư ng – GV Nguy n Minh Huy The Law of The Big Three Ví d 1: class Array { private: int m_size; int *m_data; public: Array(int size); ~Array(); }; Array::~Array() { delete []m_data; } Phương pháp l p trình hư ng đ i tư ng – GV Nguy n Minh Huy void main() { Array a1(5); } The Law of The Big Three Ví d 2: class Array { private: int m_size; int *m_data; public: Array(int size); ~Array(); }; Phương pháp l p trình hư ng đ i tư ng – GV Nguy n Minh Huy void main() { Array a1(5); Array a2(a1); } The Law of The Big Three V n đ chép b nh (hdsc m c đ nh): Hàm d ng chép m c đ nh chép giá tr t ng thu Dùng chung c tính M t b nh !! b nh !! a1: Array m_size m_data a2: Array 101 m_size m_data Ph i cài đ t l i hàm d ng chép!! Phương pháp l p trình hư ng đ i tư ng – GV Nguy n Minh Huy The Law of The Big Three Ví d 2: class Array { private: int m_size; int *m_data; public: Array(int size); Array(const Array &a); ~Array(); }; Array::Array(const Array &a) { m_size = a.m_size; a.m_size; m_data = new int[m_size]; int[m_size]; for (int i = 0; i < m_size; i++) (int m_size; m_data[ m_data[ i ] = a.m_data[ i ]; a.m_data[ } void main() { Array a1(5); Array a2(a1); } Phương pháp l p trình hư ng đ i tư ng – GV Nguy n Minh Huy The Law of The Big Three Ví d 3: class Array { private: int m_size; int *m_data; public: Array(int size); Array(const Array &a); ~Array(); }; Phương pháp l p trình hư ng đ i tư ng – GV Nguy n Minh Huy void main() { Array a1(5); Array a2(6); a2 = a1; } The Law of The Big Three V n đ chép b nh (ttg m c đ nh): Toán t gán m c đ nh chép giá tr t ng thu c Dùng chung tính Rị r b nh !! M t b nh !! b nh !! a1: Array m_size m_data a2: Array 101 m_size m_data 405 Ph i cài đ t l i toán t gán!! Phương pháp l p trình hư ng đ i tư ng – GV Nguy n Minh Huy 10 The Law of The Big Three Ví d 2: Array & Array::operator =(const Array &a) class Array { { delete m_data; m_data; private: m_size = a.m_size; a.m_size; int m_size; m_data = new int[m_size]; int[m_size]; int *m_data; for (int i = 0; i < m_size; i++) (int m_size; public: m_data[ m_data[ i ] = a.m_data[ i ]; a.m_data[ Array(int size); return *this; Array(const Array &a); void main() } ~Array(); { Array & operator =(const Array &a); Array a1(5); }; Array a2(6); a2 = a1; Phương pháp l p trình hư ng đ i tư ng – GV Nguy n Minh Huy } 11 The Law of The Big Three Dr Guru khuyên: lu t “ba ông l n” L p có thu c tính tr , ph i kèm theo: Hàm h y: thu h i b nh Hàm d ng chép: chép b nh Toán t gán: chép b nh class HocSinh { private: char *m_hoTen; public: HocSinh(const HocSinh &h); ~HocSinh(); HocSinh & operator =(const HocSinh &h); }; Phương pháp l p trình hư ng đ i tư ng – GV Nguy n Minh Huy 12 Bài t p Bài t p 5.1: Xây d ng l p ma tr n có nh ng phương th c c n thi t đ đo n chương trình sau ch y ng nghĩa nghĩa void main() { MaTran MaTran m1(3, 5); // Kh i t o ma tr n x 5, ph n t = MaTran MaTran m2 = m1; // Kh i t o m2 t m1 MaTran MaTran m3 = m1 + m2; // C ng ma tr n n int max = m3.timMax(); // Tìm ph n t l n nh t t cout