Tải bản đầy đủ (.pdf) (20 trang)

Bài giảng Lập trình hướng đối tượng C++‎ - Chương 3: Lớp và đối tượng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (994.8 KB, 20 trang )

Chương 3

LỚP VÀ ĐỐI TƯỢNG

1


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 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

2


Lớp
• Khai báo
class <Tên lớp> {
Thuộc tính truy cập :
<Khai báo thành phần dữ liệu>
Thuộc tính truy cập :
<Khai báo các hàm thành viên>
};

Sơ đồ lớp
điểm trong
không gian
2 chiều


3


Lớp
• Định nghĩa hàm thành viên
Tốn tử chỉ
phạm vi
<Kiểu trả về> <Tên lớp> :: <Tên hàm>( Các tham số + Kiểu )
{
< 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 >
}

4


Lớp
• Ví dụ

5


Đối tượng
• Khởi tạo đối tượng
– Dạng biến:
VD:

<Tên lớp> <Tên đối tượng>;


Diem a, b;

– Dạng mảng: <Tên lớp> <Tên mảng>[Kích thước];
VD:

Diem mang[10];
x
y
x
y

1000H
a
1004H

1008H

x
y
mang

b
6


Đối tượng
• Khởi tạo đối tượng
– Dạng con trỏ :
VD:


Diem *pa, *ds;
pa= new Diem; ds= new Diem[10];
delete pa; delete[] ds;

Chú ý: Phải cấp và thu hồi vùng nhớ cho con trỏ đối tượng.
106
*pa
0

*ds

106
4

x
y

1060H

1064H
x
y
7


Đối tượng
• Sử dụng đối tượng
– Khi khởi tạo đối tượng xong, ta có thể :
• 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 đó.

8


Đối tượng
• Ví dụ

9


Đố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 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
Diem
b = a;

a;

a.KhoiTao(10,20);

b, *pb;
b.InDiem();


// In ra (10, 20)

pb = new Diem;
*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 (Constructor)
– Tại sao 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 các dữ 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 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 :
• 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
• 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() {
// 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ụ 2 về 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 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 : ~<Tên lớp> ( ) { … }

– Không được gọi trực tiếp mà sẽ được tự động gọi khi hủy
bỏ đối tượng.
VD:
Diem::~Diem () { }
SinhVien::~SinhVien() {
delete[] hoten;
}
15


Các loại đối tượng
• Đối tượng tồn cục - Đối tượng cục bộ
– Đối tượng tồn cục :
• Khai báo ngồi các lớp và ngồ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ộ :

• 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 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ó.

Tại thời điểm này
17
dem = ?


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

=> khi gọi hàm không cần đối tượng nào :
<Tên lớp>::<Tên hàm> (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.

18


Khai thác một lớp
• Khai báo lớp : file <tên lớp>.hpp
• Định nghĩa hàm thành viên : file <tên lớp>.cpp
• Sử dụng lớp : trong 1 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 một lớp
• Tránh định nghĩa lớp nhiều lần :
Để tránh #include nhiều
lần một lớp có trong
nhiều tập tin khác nhau,

ta dùng các từ khóa tiền
xử lý.
#ifndef
#define
#endif
20



×