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: [Kích thước];

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 : ~ ( ) { … } sau khi kết thúc hàm main(). – Không ñược gọi trực tiếp mà sẽ ñược tự ñộng gọi khi hủy – ðối tượng cục bộ :

• 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. :::: (danh sách tham số)

– 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 .hpp • ðịnh nghĩa hàm thành viên : file .cpp • 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 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