1. Trang chủ
  2. » Tất cả

HTTTQL-Slide buổi 2

12 15 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 12
Dung lượng 279,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

Sử dụng phương thức lấy địa chỉ trong xây dựng các hàm cơ bản của lớp dẫn xuất... Lớp Class…~1950 ~1970 ♥ Kiểu class Kiểu struct: đây là 1 kiểu dữ liệu chỉ định nghĩa phần D, phần P hoà

Trang 1

Sử dụng phương thức lấy địa chỉ trong xây dựng các hàm cơ bản của lớp dẫn xuất

Trang 2

I/ Lớp (Class) là gì???

 ♥ Đại số hệ: α = { D, P}

D- Tập dữ liệu

P – Tập thao tác

 ♥ Kiểu dữ liệu (type)

Type ≈ α được cài đặt trong một ngôn ngữ lập trình ( trong Nó thành phần D

bị giới hạn)

Ví dụ:

<Đại số hệ số nguyên> = { D, P}

D = { -∞, …., -1,0, 1,…∞}

P = { +, -, *, :…}

Trong ngôn ngữ PASCAL <Kiểu số nguyên (integer)> = { D, P}

D = { -32768 ÷ +32767}

P – giống đại số hệ.

Trong ngôn ngữ lập trình Kiểu dữ liệu phân làm 2 loại:

Kiểu cơ sở: được cài đặt sẵn trong ngôn ngữ lập trình (int, char, float,….)

Kiểu định nghĩa: do nhà lập trình tạo lập (struct, set, class).

Trang 3

Lớp (Class)…

~1950

~1970

♥ Kiểu class

Kiểu struct: đây là 1 kiểu dữ liệu chỉ định nghĩa phần D, phần P hoàn toán có thể xây dựng bổ sung tùy thuộc từng bài toán (kiểu dữ liệu chưa đóng gói)

Kiểu class: là kiểu dữ liệu hoàn thiện do nhà lập trình tạo ra hướng tới các đối tượng thực Kiểu dữ liệu này gắn chặt chẽ 2 thành phần D và P để mô tả 1 thực thể trong thế giới thực Đây chính là tính đóng gói của kiểu dữ liệu xây dựng( Có đối tượng thì có

thao tác,và ngược lại)

Trang 4

 ♥ Định nghĩa lớp:

Class tên_lớp

{ [private/protected/public]:

// Khai báo các thành phần dữ liệu – D

[private/protected/public]:

// Khai báo các phương thức+ hàm (thao tác –P)

};

Trang 5

Các hàm cơ sở…

Ví dụ: Xây dựng lớp chứng minh thư….

Class CMT

{ char scmt[12], ten[25], nguyenquan[45];

Int ngay, thang, nam;

Public:

CMT();

~CMT();

CMT(CMT &);

CMT &operator=(CMT &)

Friend ostream &operator<<(ostream & os, CMT &);

Friend istream &operator>>(istream & is, CMT &);

CMT *laydc();

Int laynam();

};

Trang 6

Các hàm cơ sở….

 ♥ Các hàm cơ sở:

Các thao tác P phân thành 2 loại:

- Loại cơ sở: đây là các thao tác cơ bản mà 1 kiểu dữ liệu cần có

- Loại mở rộng: là các thao tác được bổ sung tùy thuộc các loại ứng dụng của lớp

Thao tác cơ sở của các kiểu dữ liệu (hàm cơ sở) gồm:

a/ Hàm tạo (constructor):

Để cấp phát không gian nhớ khi tạo lập (khai báo) các đối tượng mới,

b/Hàm hủy (desconstructor)

Ngược với hàm tạo, dung để thu hồi vùng nhớ khi sử dụng xong đối tượng.

c/ Hàm tạo sao chép (copyconstructor)

Có chức năng tạo ra các đối tượng mới tương tự như các đối tượng đang tồn tại.

d/ Toán tử gán (=)

Dùng để gán các đối tượng đang tồn tại.

e/ Toán tử nhập/xuất (cin>>, cout<<)

Để nhập hoặc xuất giá trị cho các thành phần dữ liệu của đối tượng.

Trang 7

IV/ Lớp dẫn xuất là gì?

A

B

Ta co thể xây dựng lớp mới (lớp dẫn xuất B) dựa trên các lớp đang tồn tại (lớp

cơ sở A) Lớp dẫn xuất được thừa kế toàn bộ các thành phần của lớp cơ sở A Ngoại trừ các hàm cơ sở, do vậy cần xây dựng lại các hàm cơ sỏ cho lớp dẫn xuất

Trong đối tượng g1(kiểu B) có 2 thành phần, thừa kế (D_TK) từ lớp A và thành phần riêng (D_R) của lớp dãn xuất.

D_TK d1

Trang 8

Xây dựng toán tử gán & phương thức toán tử xuất nhập

của lớp dẫn xuất như thế nào???

 ♥ Phương thức lấy địa chỉ của lớp cơ sở:

Dùng để lấy địa chỉ phần dữ liệu thừa kế từ lớp cơ sở trong lớp dẫn xuát, cách viết như sau:

Tên_lớp_cơ_sở *tên_phương_thức_lấy_dc() { return this;}

 ♥Toán tử gán (=):

Dùng để gán 2 đối tượng đang tồn tại.

Cách xây dựng:

[void/Tên lớp] operator = ( Tên lớp & đối tượng bị gán]

{ // Các lệnh gán các thành phần dữ liệu thừa kế(TP_D_TK)

// Các lệnh gán các thành phần dữ liệu riêng(TP_D_R)

[return đối_tượng_bị_gán];}

Trang 9

Xây dựng toán tử gán & …

 ♥ Phương thức toán tử nhập (cin>>):

Cách xây dựng:

Friend ístream &operator>>( istream & is, tên_lớp & đối tượng )

{ // Các lệnh nhập dữ liệu cho thành phần dữ liệu thừa kế(TP_D_TK)

// Các lệnh nhập dữ liệu cho thành phần dữ liệu riêng(TP_D_R)

Return is; };

 ♥Phương thức toán tử xuất (cout<<):

Cách xây dựng:

Friend ostream &operator<<( ostream & os, tên_lớp & đối tượng )

{ // Các lệnh xuất dữ liệu cho thành phần dữ liệu thừa kế(TP_D_TK)

// Các lệnh xuất dữ liệu cho thành phần dữ liệu riêng(TP_D_R)

Return os; };

Trang 10

Lưu ý:

Trong xây dựng các hàm cơ sở (toán tử gán, toán tử xuất và toán tử

nhập) cho lớp dẫn xuất ta đều phải can thiệp tới các thành phần dữ

liệu thừa kế từ lớp cơ sở (TP_D_TK) Để làm được điều đó ta có 2

cách:

C1: TRuy cập trực tiếp các thành phần thừa kế :

muốn làm theo cách này thì các thành phần dữ liệu cần khai báo

PUBLIC, điều này phá vỡ tính đóng gói của lớp, ngoài ra việc can

thiệp đến nhiều thành phần dữ liệu của lớp sẽ phức tạp & dễ sai sót.

C2: Sử dụng phương thức lấy địa chỉ của lớp cơ sở :

Ưu điểm: bảo toàn tính đóng gói và can thiệp đến thành phần thừa đơn

giản

10

Xây dựng toán tử gán & …

Trang 11

Ví dụ

Ví dụ: xây dựng lớp giáo viên dựa trên lớp CMT.

Class GV: public CMT

{ char mscc[12], tentruong[25], tenkhoa[25];

Public://…

GV &operator= (GV &);

Friend ostream &operator<<(ostream &os, GV &);

Friend istream &operator>>(istream &is, GV &);

};

g1

Trang 12

Ví dụ

GV &GVoperator= (GV &g)

{ CMT *d1,*d2; d1= (*this).laydc(); d2 = g.laydc(); (*d1)=(*d2);

Strcpy(mscc,g.mscc);strcpy(tentruong,g tentruong);strcpy(tenkhoa,g tenkhoa);

Return g;

};

istream &operator>>(istream &is, GV &g)

{ CMT *d1; d1=g.laydc(); cin>> *d1;

Gets(g.mscc); gets(g.tentruong); gets(g.tenkhoa);

Return is;}

ostream &operator<<(ostream &os, GV &g)

{ CMT *d1; d1=g.laydc(); cout<< *d1;

Cout<<g.mscc<<g.tentruong<<g.tenkhoa;

Return os;}

Void main()

{ GV g1, g2;

Cin>>g1;

g2=g1;

Cout<<g1<< “\n”<<g2;

};

12

D_TK

D_R

d1

D_TK

D_R d2

Ngày đăng: 18/04/2022, 22:45

🧩 Sản phẩm bạn có thể quan tâm

w