Bài giảng Lập trình hướng đối tượng C: Chương 4 trang bị cho người học kiến thức cơ bản về việc khởi tạo đối tượng, hàm bạn và lớp bạn. Nội dung chính trong chương này gồm: Đối tượng là thành phần của lớp, đối tượng là thành phần của mảng, đối tượng được cấp phát động, hàm bạn, lớp bạn, các nguyên tắc xây dựng lớp.
VIỆC KHỞI TẠO ĐỐI TƯỢNG, HÀM BẠN VÀ LỚP BẠN ThS Trần Anh Dũng Nội dung Đối tượng thành phần lớp Đối tượng thành phần mảng Đối tượng cấp phát động Hàm bạn Lớp bạn Các nguyên tắc xây dựng lớp 14/09/2014 Lập trình hướng đối tượng Đối tượng thành phần lớp Đối tượng thành phần đối tượng khác, đối tượng thuộc lớp “lớn” tạo ra, thành phần tạo 14/09/2014 Lập trình hướng đối tượng Đối tượng thành phần lớp Phương thức thiết lập (nếu có) tự động gọi cho đối tượng thành phần Khi đối tượng kết hợp bị hủy đối tượng thành phần bị hủy, nghĩa phương thức hủy bỏ gọi cho đối tượng thành phần, sau phương thức hủy bỏ đối tượng kết hợp gọi 14/09/2014 Lập trình hướng đối tượng Đối tượng thành phần lớp Nếu đối tượng thành phần phải cung cấp tham số thiết lập đối tượng kết hợp (đối tượng lớn) phải có phương thức thiết lập để cung cấp tham số thiết lập cho đối tượng thành phần Cú pháp để khởi động đối tượng thành phần dùng dấu hai chấm (:) theo sau tên thành phần tham số khởi động 14/09/2014 Lập trình hướng đối tượng Ví dụ class TamGiac{ Diem A, B, C; public: TamGiac(double xA, double yA, double xB, double yB, double xC, double yC){: A(xA,yA), B(xB,yB),C(xC,yC){ } void Ve(); // }; TamGiac t(100,100,200,400,300,300); 14/09/2014 Lập trình hướng đối tượng Ví dụ class TamGiac{ Diem A,B,C; int loai; public: TamGiac(double xA, double yA, double xB, double yB, double xC, double yC, int l): A(xA,yA), B(xB,yB), C(xC,yC), loai(l) { } Cú pháp dấu hai chấm dùng cho đối void Ve(); ? tượng thành phần thuộc // kiểu sở }; TamGiac t (100, 100, 200, 400, 300, 300, 1); 14/09/2014 Lập trình hướng đối tượng Ví dụ class Diem{ double x,y; public: Diem(double xx = 0, double yy = 0) : x(xx), y(yy){ } void Set(double xx, double yy){ x = xx; ? y = yy; } }; 14/09/2014 Lập trình hướng đối tượng Đối tượng thành phần mảng 14/09/2014 Lập trình hướng đối tượng Đối tượng thành phần mảng Khi mảng tạo các phần tử tạo phương thức thiết lập gọi cho phần tử Vì khơng thể cung cấp tham số khởi động cho tất phần tử mảng khi khai báo mảng, đối tượng mảng phải có khả tự khởi động, nghĩa thiết lập khơng cần tham số 14/09/2014 Lập trình hướng đối tượng 10 Lớp bạn (Friend class) Một lớp truy cập đến thành phần có thuộc tính private lớp khác Để thực điều này, lấy tồn lớp làm bạn (hàm friend) cho lớp khác 14/09/2014 Lập trình hướng đối tượng 34 Ví dụ class TOM{ public: friend class JERRY; private: int SecretTom; }; class JERRY{ public: void Change(TOM T){ T.SecterTom++; } }; 14/09/2014 //Có lớp bạn JERRY //Bí mật TOM //Bạn nên thao Lập trình hướng đối tượng 35 Giao diện chi tiết cài đặt Lớp có hai phần tách rời Phần giao diện khai báo phần public để người sử dụng “thấy” sử dụng Chi tiết cài đặt bao gồm liệu khai báo phần private lớp chi tiết mã hóa hàm thành phần, vơ hình người dùng Lớp ThoiDiem cài đặt với thành phần liệu giờ, phút, giây tổng số giây tính từ 14/09/2014 Lập trình hướng đối tượng 36 Giao diện chi tiết cài đặt Ta thay đổi uyển chuyển chi tiết cài đặt, nghĩa thay đổi tổ chức liệu lớp, thay đổi chi tiết thực hàm thành phần (do thay đổi tổ chức liệu để cải tiến giải thuật) Nhưng bảo đảm khơng thay đổi phần giao diện khơng ảnh hưởng đến người sử dụng, không làm đổ vỡ kiến trúc hệ thống 14/09/2014 Lập trình hướng đối tượng 37 Lớp ThoiDiem – Cách class ThoiDiem{ int gio, phut, giay; static bool HopLe(int g, int p, int gy); public: ThoiDiem(int g = 0, int p = 0, int gy = 0) {Set(g,p,gy);} void Set(int g, int p, int gy); int LayGio() const {return gio; } int LayPhut() const {return phut; } int LayGiay() const {return giay; } void Nhap(); void Xuat() const; void Tang(); void Giam(); }; 14/09/2014 Lập trình hướng đối tượng 38 Lớp ThoiDiem – Cách class ThoiDiem{ long tsgiay; static bool HopLe(int g, int p, int gy); public: ThoiDiem(int g = 0, int p = 0, int gy = 0) {Set(g,p,gy);} void Set(int g, int p, int gy); int LayGio() const {return tsgiay/3600;} int LayPhut() const {return (tsgiay%3600)/60;} int LayGiay() const {return tsgiay%60;} void Nhap(); void Xuat() const; void Tang(); void Giam(); }; 14/09/2014 Lập trình hướng đối tượng 39 Các nguyên tắc xây dựng lớp Hình thành lớp: Khi ta nghĩ đến “nó” khái niệm riêng lẻ Xây dựng lớp biểu diễn khái niệm Lớp biểu diễn cụ thể khái niệm tên lớp ln danh từ Các thuộc tính lớp thành phần liệu nên chúng danh từ Các hàm thành phần (các hành vi) thao tác rõ hoạt động lớp nên hàm động từ 14/09/2014 Lập trình hướng đối tượng 40 Các nguyên tắc xây dựng lớp Program pick nouns Problem Bao gói liệu hành vi thành class pick verbs 14/09/2014 properties Operation (function, method, behavior) class XX { type1 prop1; type2 prop2; type Method1( ) { } }; void main() { XX x; // object variable x.Method( ); } Lập trình hướng đối tượng 41 Các nguyên tắc xây dựng lớp Các thuộc tính suy diễn từ thuộc tính khác nên dùng hàm thành phần để thực tính tốn class TamGiac{ class TamGiac{ Diem A,B,C; Diem A,B,C; double ChuVi; public: double DienTich; // public: double ChuVi() const; // }; 14/09/2014 double DienTich() const; }; Lập trình hướng đối tượng 42 Các nguyên tắc xây dựng lớp Tuy nhiên, thuộc tính suy diễn dịi hỏi nhiều tài nguyên thời gian để thực tính tốn, ta nên khai báo liệu thành phần class QuocGia{ long DanSo; double DienTich; double TuoiTrungBinh; public: double TinhTuoiTB() const; // }; 14/09/2014 Lập trình hướng đối tượng 43 Các nguyên tắc xây dựng lớp Dữ liệu thành phần nên kết hợp: class TamGiac{ Diem A,B,C; public: // }; class HinhTron{ Diem Tam; double BanKinh; public: // }; 14/09/2014 class TamGiac{ double xA, yA; double xB, yB, xC, yC; public: // }; class HinhTron{ double tx, ty, BanKinh; public: // }; Lập trình hướng đối tượng 44 Các nguyên tắc xây dựng lớp Trong trường hợp, nên có phương thức thiết lập (Constructor) để khởi động đối tượng Nên có phương thức thiết lập có khả tự khởi động khơng cần tham số 14/09/2014 Lập trình hướng đối tượng 45 Các nguyên tắc xây dựng lớp Nếu đối tượng có nhu cầu cấp phát tài ngun phải có phương thức thiết lập, copy constructor để khởi động đối tượng đối tượng kiểu có destructor để dọn dẹp Ngồi cịn có phép gán (chương 5) Nếu đối tượng đơn giản không cần tài nguyên riêng Khơng cần copy constructor destructor 14/09/2014 Lập trình hướng đối tượng 46 Bài tập Viết chương trình cho phép nhập, xuất, khởi tạo học sinh Thông tin cần quan tâm học sinh: Mã học sinh (8 ký tự), họ tên học sinh (30 ký tự), điểm toán (int), điểm văn (int) Danh từ: Học sinh cấu trúc HS Động từ: Nhập hs Hàm Nhap() Xuất hs Hàm Xuat(); 14/09/2014 Lập trình hướng đối tượng 47 Q&A ... yy; } }; 14/ 09/20 14 Lập trình hướng đối tượng Đối tượng thành phần mảng 14/ 09/20 14 Lập trình hướng đối tượng Đối tượng thành phần mảng Khi mảng tạo các phần tử tạo phương thức thiết lập gọi... gọi 14/ 09/20 14 Lập trình hướng đối tượng Đối tượng thành phần lớp Nếu đối tượng thành phần phải cung cấp tham số thiết lập đối tượng kết hợp (đối tượng lớn) phải có phương thức thiết lập để cung... dung ? ?Đối tượng thành phần lớp ? ?Đối tượng thành phần mảng ? ?Đối tượng cấp phát động Hàm bạn Lớp bạn Các nguyên tắc xây dựng lớp 14/ 09/20 14 Lập trình hướng đối tượng Đối tượng thành phần lớp Đối