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