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