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