1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÀI GIẢNG HỖ TRỢ OO của Borland C++

51 256 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 51
Dung lượng 159,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mục tiêu• Biết cách sử dụng con trỏ this • Sử dụng được hàm và lớp với chỉ thị friend • Hiện thực và sử dụng được constructor • Hiện thực và sử dụng được desstructor • Lập trình được với

Trang 1

Chương 3

HỖ TRỢ OO

của Borland C++

Trang 2

Mục tiêu

• Biết cách sử dụng con trỏ this

• Sử dụng được hàm và lớp với chỉ thị friend

• Hiện thực và sử dụng được constructor

• Hiện thực và sử dụng được desstructor

• Lập trình được với mảng đối tượng

• Hiện thực được thuộc tính và hàm static

Trang 4

• public: cho phép bên ngoài truy cập  interface của lớp.

• private: các thành phần nội, không cho phép bên ngoài truy cập.

• protected: các thành phần dành cho lớp thừa kế truy cập, không cho phép các đối tượng không phải

là con truy cập.

Trang 5

3.2- Con trỏ this

• this: từ khóa, là

pointer chỉ đến đối

tượng hiện hành

• Được dùng trong code các

method của lớp

?

Trang 6

Con trỏ this…

class D

{ private : int b,c,y,z ;

public :

void f () { y=1 ; this -> z = 5 ; }

void g (void) { (* this).b = 1 ; c=1; }

};

Trong code của method:

y=1; tương đương với this -> y = 1;

• Khi cần trả trị là pointer của đối tượng hiện hành:

Trang 7

• Hàm friend sẽ nhận 1 đối tượng thuộc lớp này

làm tham số vì đây là hàm hướng thủ tục

•Khi hiện thực hàm friend,

không có chỉ thị friend nữa.

•Khi hiện thực hàm có tham số

mặc định bên ngoài lớp, không chỉ định trị mặc định Nếu có trị mặc định sẽ gây lỗi lúc compile

Trang 8

int Secret ; // điều bí mật (điểm)

friend class B ; // Khai báo lớp friend

};

class B // Khai báo lớp B

{ public:

void Change (A *T) // Sửa điểm cho đối tượng lớp A

• Khi B là friend của A thì

trong B có phương thức nhận đối tượng lớp A là tham số.

• B là friend của A nhưng chưa chắc A là friend của B- Điều này phụ thuộc là trong B có khai báo A là friend của B hay không.

Trang 9

Constructor:Hành vi được thực thi ngay lúc

định nghĩa biến đối tượng.

Mọi lớp đều hiển nhiên có 1 constructor mặc định của ngôn ngữ.

Đa số các constructor mặc định của ngôn ngữ OOP

có tác vụ xóa trống bộ nhớ cho các dữ liệu của đối tượng thuộc lớp nếu lớp này không hiện thực các constructor.

Trang 10

Demo: Default constructor của BC++

• Default

constructor của BC++

không xóa trống bộ nhớ chứa dữ liệu của đối

tượng

Trang 11

Gán trị cho các thành phần dữ liệu

từ tham số.

Cấp tài nguyên nếu cần ( cấp bộ nhớ động )

• Constructor phải là một hành vi public vì

là công cụ định nghĩa biến đối tượng.

• Constructor có quan hệ chặt chẽ với các

dữ liệu của đối tượng nên không thể là

hành vi static.

Trang 13

Constructor mặc định (chuẩn, default) là

constructor KHÔNG THAM SỐ

Mỗi lớp chỉ có thể có TỐI ĐA 1 default constructor

( sẽ có lỗi Ambiguity between Constructor1(…)

and Construcor2 (…) )

Trang 14

• Một class có thể có nhiều Constructor cho những tình huống định nghĩa đối tượng khác nhau

Trang 16

Constructor ( )

Hai loại constructor: Constructor thường (tham

số là các dữ liệu đơn), constructor sao chép

(copy constructor- tham số là 1 đối tượng cùng lớp nhằm sao chép trị từ đối tượng đã có và đối tượng hiện hành)

Tham số của 1 method là 1 đối tượng thì nên dùng tham khảo với toán tử & để tiết kiệm bộ nhớ stack

Trang 17

Constructor ( )

Một lớp không có constructor sao chép mà lại định nghĩa đối tượng bằng cú pháp

TênLớp Obj2 = Obj1;

Trình biên dịch sẽ dùng constructor sao chép chuẩn của ngôn ngữ để sao chép dữ liệu của Obj1 sang Obj2 (giống sao chép cấu trúc của phép gán cấu trúc)

Trang 18

Thí dụ: Lớp mô tả vòng tròn trên màn hình

class Circle

{ int x,y , r ; // tâm và bán kính

int bkColor; // mầu nền

Circle *pv1 = new Circle ( 120,480,70,10,3);

Circle *pv2= new Circle(*pv1);

Constructor chuẩn, gán trị

trống

Constructor 5 tham số gán 5 trị thuộc tính

Định nghĩa biến theo đúng mẫu constructor đã Copy constructor

Trang 19

Constructor sao chép trị từ 1 đối tượng mảng đã có.

Constructor nối trị từ 2 mảng đã có vào mảng hiện hành

INT_AR ( INT_AR& Obj1);

INT_AR ( INT_AR& Obj1, INT_AR& Obj2);

a= new int[n];

Trang 20

Constructor sao chép trị từ 1 đối tượng ma trận đã có.

Gợi ý về 2 cách quản lý ma trận vuông:

Dùng int* Dùng int**

Dữ liệu int*m, n; int**m, n;

Cấp bộ m=new int[n*n]; m= new int* [n];

Trang 21

3.6- Destructor

Tình huống lập trình

Cấp bộ nhớ động, sử dụng xong quên trả  Cạn tài nguyên của hệ thống

Mở file, sử dụng xong, quên đóng file

Có cách nào tự động hóa các việc này không?Giải pháp là DESTRUCTOR

Trang 22

3.6- Destructor ( )

Hành vi được thực thi khi đối tượng không còn tồn tại

Thời gian sống của đối tượng: Từ lúc định

nghĩa đối tượng cho đến khi khối phát biểu có chứa đối tượng được thực thi xong

Trang 23

Destructor không được có tham số.

Các tác vụ thường dùng trong code của

destructor: TRẢ TÀI NGUYÊN

Destructor phải có đặc tính public, không thể là static (giống constructor)

Mỗi class chỉ có thể có tối đa 1 destructor

Trang 24

~INT_AR() { if (a) delete[ ] a; }

int getSize() { return n; }

int* getArray() { return a; }

nguyên

Trang 25

3.7- Mảng đối tượng

Định nghĩa mảng đối tượng với constructor chuẩn

ClassName ObjAr1[ 10];

ClassName *ObjAr2 = new ClassName[10];

Định nghĩa mảng đối tượng với các contructor khác nhau ClassName ObjAr3[4] = { (params0), (params1),

(params2), (params3) } ;

ClassName *ObjAr4[3] = { new ClassName(params0), new ClassName(params1), new ClassName(params2) }; ClassName** ObjAr5 = new ClassName* [3];

ObjAr5[0]= new ClassName (params0);

ObjAr5[1]= new ClassName (params1);

ObjAr5[2]= new ClassName (params2);

Các paramsX ứng với các constructor khác nhau.

Xem thí dụ OBJ_ARR.CPP

Trang 26

3.8- Lớp có dữ liệu static

static= tĩnh

Dữ liệu static của 1 lớp là dữ liệu chung của mọi

đối tượng thuộc lớp nên còn được gọi là class

variables

Dữ liệu static thường được dùng khi các đối

tượng cùng lớp có dữ liệu mang cùng một trị

Dữ liệu static được đặt ngoài khối bộ nhớ của các đối tượng thuộc lớp và phải được khai báo

Trang 27

3.8- Lớp có dữ liệu static ( )

Thí dụ: Mọi nhân viên trong 1 phòng ban đều biết

phòng ban mình có bao nhiêu người.

Hiện thực 1- Không dùng dữ liệu static

Khi thêm vào 1 nhân viên, cả 6 đối tượng cùng phải cập nhật dữ liệu SốNhânViên Nếu ta quên 1 phát biểu cập nhật, dữ liệu này bị mất nhất quán Tương tự khi có 1 nhân viên thôi việc.

Trang 28

3.8- Lớp có dữ liệu static ( )

Thí dụ: Mọi nhân viên trong 1 phòng ban đều biết

phòng ban mình có bao nhiêu người.

Hiện thực 2- Dùng dữ liệu static

Khi thêm vào 1 nhân viên, chỉ cần 1 phát biểu cập nhật ( trong

Thành phần static được

để rời và là chung của mọi đối tượng cùng lớp

Trang 29

3.9- Lớp có hành vi static

Hành vi static của 1 lớp là hành vi cho phép bên ngoài

sử dụng mà không cần định nghĩa 1 đối tượng thuộc

Trang 30

static double Sqrt(double x) { return sqrt(x);}

static double Pow (double x, double y) { return pow(x,y);}

static double Sin (double x) { return sin(x);}

Trang 31

3.10- Tóm tắt

this : con trỏ của đối tượng hiện hành

constructor: Hành vi được thực thi ngay lúc định nghĩa biến Mỗi constructor đóng vai trò như 1 template (mẫu) định nghĩa đối tượng

Mặc định, mỗi lớp có constructor chuẩn của

ngôn ngữ – thường là gán trị trống cho mọi

thành phần dữ liệu của đối tượng thuộc lớp khi đối tượng được định nghĩa – nếu lớp này không

có hiện thực constructor

Nếu 1 lớp đã có hiện thực constructor thì

constructor mặc định của ngôn ngữ không còn được áp dụng cho các đối tượng thuộc lớp này nữa

Trang 32

ClassName NewObj = ExistedObj; hoặc

ClassName NewObj (ExistedObj);

Trang 33

3.10- Tóm tắt ( )

Tầm vực (scope) của 1 biến bắt đầu từ lúc định

nghĩa biến này cho đến hết khối phát biểu chứa nó Thời gian sống của đối tượng bắt đầu từ lúc code định nghĩa đối tượng được thực thi cho đến hết

thực thi hết khối phát biểu chứa nó.

Trạng thái (status) của 1 đối tượng là tập gía trị của các thuộc tính Như thế trạng thái của đối tượng có thể thay đổi theo thời gian.

Destructor là hành vi được thực thi vào lúc đối

tượng CHẾT.

Cú pháp destructor:

~ClassName (void) { <code> }

Mỗi lớp chỉ có tối đa 1 destructor.

Trang 34

Cú pháp gọi hành vi static:

ClassName.staticMethod(params);

Obj.staticMethod(params);

Trang 35

Trắc nghiệm

Trang 37

Câu 2

Chọn phát biểu sai

a- Hàm friend của 1 lớp là hàm được phép

truy cập mọi thuộc tính của lớp

b- Hàm friend của 1 lớp là hàm chỉ được phép truy cập thuộc tính public của lớp

c- Hàm friend của 1 lớp là hàm không được phép truy cập thuộc tính protected của lớp

b

c

Trang 38

Câu 3

class A được khai báo là friend của class B ( trong khai báo của class A) Thông thường trong class A có ít nhất một hành vi nhận 1 đối tượng class B là tham số

a- Đúng

b- Sai

c- Không biết

a

Trang 39

Câu 4

Constructor của 1 class

a- Buộc phải là public

b- Có thể là private

a

Trang 40

Câu 5

Chọn các phát biểu sai

a- Nếu 1 user class trong C++ không có

constructor thì không thể sử dụng đối tượng thuộc lớp này

b- Nếu 1 user class trong C++ không có

constructor thì vẫn có thể sử dụng đối

tượng thuộc lớp này

c- Destructor của 1 lớp có thể có tham số

a

b

Trang 41

a- Không có gì cần cải tiến.

b- Thêm các method có ý nghĩa hơn

c- Cần xây dựng destructor

c

Trang 42

Câu 7

Chọn phát biểu sai

Có hai lớp A,B đều có constructor, B là con public của A Khi định nghĩa 1 đối tượng lớp B

a- Constructor của A được thực thi trước,

constructor của B được thực thi sau

b- Constructor của B được làm thực thi,

constructor của A được thực thi sau

b

Trang 43

Câu 8

Chọn phát biểu sai

Có hai lớp A,B đều có constructor, B là con public của A Khi hủy 1 đối tượng lớp B

a- Destructor của A được thực thi trước,

destructor của B được thực thi sau

b- Destructor của B được thực thi trước,

destructor của A được thực thi sau

a

Trang 45

Câu 10

Chọn phát biểu đúng.

a- Constructor và destructor có thể có tham số.

b- Constructor và destructor không thể có tham số.

c- Constructor và destructor buộc phải có tham số.

d- Constructor có thể có tham số, destructor buộc phải

Trang 47

c- Chỉ cho phép bên ngoài sử dụng trong

trường hợp không tồn tại 1 đối tượng thuộc lớp

a

c

Trang 48

Câu 13

Tầm vực của 1 đối tượng

a- Là khối văn bản chương trình kể từ lúc định nghĩa đối tượng đến hết khối chứa nó

b- Là vùng văn bản chương trình có thể truy xuất được đối tượng

c- Là toàn bộ chương trình

a

b

Trang 49

Câu 14

Chọn các phát biểu sai

Thời gian sống của 1 đối tượng:

a- Là thời gian thực thi chương trình

b- Là thời gian kể từ lúc đối tượng được định nghĩa đến khi chương trình thực thi xong.c- Là thời gian kể từ lúc đối tượng được định nghĩa đến khi khối chương trình chứa đối tượng được thực thi xong

a

Trang 50

Câu 15

Trạng thái của đối tượng:

a- Là khối bộ nhớ chứa dữ liệu mô tả đối

tượng

b- Là tập các gía trị thuộc tính hiện hành của đối tượng

c- Là chương trình chứa đối tượng

d- Là một thuộc tính của đối tượng

b

Trang 51

Xin cảm ơn

Ngày đăng: 25/08/2017, 09:50

TỪ KHÓA LIÊN QUAN

w