Nội dung • Lớp: khai báo, ñịnh nghĩa hàm thành viên Chương • ðối tượng: khai báo, sử dụng, gán LỚP VÀ ðỐI TƯỢNG • Sơ lược hàm xây dựng, hàm hủy • Dữ liệu hàm thành viên tĩnh • Khai thác lớp Lớp Lớp • Khai báo • Định nghĩa hàm thành viên class { Thuộc tính truy cập : Thuộc tính truy cập : }; Toán tử phạm vi :: ( Các tham số + Kiểu ) { < Khai báo liệu cục hàm> < Thân hàm - Nội dung hàm > Sơ ñồ lớp ñiểm không gian chiều < Câu lệnh return > } Lớp ðối tượng • Ví dụ • Khởi tạo ñối tượng – Dạng biến: VD: ; Diem a, b; – Dạng mảng: [Kích thước]; VD: Diem mang[10]; 1000H x y a 1004H x y 1008H x y mang b ðối tượng ðối tượng • Khởi tạo ñối tượng • Sử dụng ñối tượng – Dạng trỏ : VD: – Khi khởi tạo ñối tượng xong, ta : • Truy xuất ñến liệu thành viên ñối tượng • Gọi hàm ñối tượng tùy theo thuộc tính truy cập thành phần ñó Diem *pa, *ds; pa= new Diem; ds= new Diem[10]; delete pa; delete[] ds; Chú ý: Phải c p thu h i vùng nhớ cho trỏ ñối tượng *pa1060 *ds 1064 x y 1060H 1064H x y ðối tượng ðối tượng • Ví dụ • Phép gán ñối tượng: – Dùng dấu = ( có sẵn ngôn ngữ C++) – Thực chất gán tương ứng thành phần liệu hai ñối tượng cho – Chỉ ñúng thành phần liệu trỏ => Phải ñịnh nghĩa lại phép gán liệu có trỏ void main() { Diem Diem a; a.KhoiTao(10,20); b, *pb; b = a; // In (10, 20) b.InDiem(); pb = new Diem; *pb = a; pb->InDiem(); // In (10, 20) Hàm xây dựng – Hàm hủy Hàm xây dựng – Hàm hủy • Hàm xây dựng (Constructor) • Hàm xây dựng (constructor) – Tại cần hàm xây dựng ? – Dùng ñể khởi tạo ñối tượng: 10 • Gán giá trị ñầu cho liệu thành viên • Cấp vùng nhớ cho trỏ thành viên – Cú pháp: • Cùng tên với tên lớp, trị trả (kể void) hiệu ứng phụ • Có thể hay có nhiều tham số • Có thể không có, có hay nhiều hàm xây dựng – Sử dụng : Cần phải khởi tạo giá trị ban ñầu cho liệu thành viên • Không ñược gọi trực tiếp • Sẽ ñược tự ñộng gọi khởi tạo ñối tượng 11 12 Hàm xây dựng – Hàm hủy Hàm xây dựng – Hàm hủy • Ví dụ hàm xây dựng • Ví dụ hàm xây dựng class Diem { int x,y; public: Diem();// xd Diem(int); Diem(int,int); }; Diem::Diem() { x=y=0; } Diem::Diem(int a) { x = y = a; } Diem::Diem(int h, int t) { x=h; y=t; } void main() { // Goi Diem() Diem a; // In (0,0) a InDiem(); // Diem(int,int) Diem b(10,5); // Diem(int) Diem c(3); Diem *pa = new Diem(); Diem *pb = new Diem(10,5); Diem *pc = new Diem(3); // Goi Diem() Diem ds1[10]; // Goi Diem() Diem *ds2 = new Diem [10]; } 13 14 Hàm xây dựng – Hàm hủy Các loại ñối tượng • Hàm hủy (destructor) • ðối tượng toàn cục - ðối tượng cục – Dùng ñể thu hồi vùng nhớ ñã cấp cho liệu thành viên trỏ ñối tượng, hủy bỏ ñối tượng => delete trỏ liệu thành viên – Một lớp có hàm hủy – Cú pháp : ~ ( ) { … } – Không ñược gọi trực tiếp mà ñược tự ñộng gọi hủy bỏ ñối tượng VD: – ðối tượng toàn cục : • Khai báo lớp hàm main() • Sẽ ñược khởi tạo (tự ñộng gọi hàm xây dựng tương ứng) trước hàm main() thực thi • Sẽ ñược hủy bỏ ( tự ñộng gọi hàm hủy cho ñối tượng ) sau kết thúc hàm main() – ðối tượng cục : • Khai báo hàm Diem::~Diem () { } SinhVien::~SinhVien() { delete[] hoten; } • Sẽ khởi tạo thực thi hàm ñó 15 • Sẽ ñược hủy bỏ ( tự ñộng gọi hàm hủy cho ñối tượng ñó) trước hàm kết thúc 16 Dữ liệu hàm thành viên tĩnh Dữ liệu hàm thành viên tĩnh • Dữ liệu thành viên tĩnh (static) • Hàm thành viên tĩnh (static) – Là liệu thành viên dùng chung cho tất ñối tượng lớp => tồn ñộc lập với ñối tượng – Giống biến toàn cục – ðộc lập với ñối tượng => gọi hàm không cần ñối tượng : :: :: (danh sách tham số) – Phải ñược khởi tạo bên lớp – Chỉ cần thêm static vào trước khai báo hàm lớp – Thường ñược sử dụng ñể ñếm số lượng ñối tượng có – Giống hàm toàn cục Tại thời ñiểm 17 dem = ? Khai thác lớp Khai thác lớp • Tránh ñịnh nghĩa lớp nhiều lần : • Khai báo lớp : file .hpp • ðịnh nghĩa hàm thành viên : file .cpp • Sử dụng lớp : file khác 18 ðể tránh #include nhiều vidu.cpp lần lớp có nhiều tập tin khác nhau, Diem.hpp class Diem { int x,y; }; Diem.cpp Vidu.cpp #include “Diem.hpp” #include “Diem.cpp” Diem::Diem() {… } void Diem::InDiem() {…} void main () { Diem a; a.InDiem(); … } ta dùng từ khóa tiền xử lý #ifndef #define #endif 19 20