PHƢƠNG THỨC THUẦN ẢO VÀ LỚP TRỪU TƢỢNG

Một phần của tài liệu Lập trình hướng đối tượng (Trang 93 - 98)

CHƢƠNG 4 XỬ LÝ ĐA HÌNH

3. PHƢƠNG THỨC THUẦN ẢO VÀ LỚP TRỪU TƢỢNG

Trong quá trình thiết kế chƣơng trình theo hƣớng đối tƣợng, để tạo nên một hệ thống phả hệ mang tính kế thừa cao, ngƣời lập trình phải đốn trƣớc sự phát triển của cấu trúc, từ đĩ chọn lựa những thành viên phù hợp cho các lớp ở trên cùng. Rõ ràng đây là một cơng việc vơ cùng khĩ khăn. Để tránh tình trạng ngƣời lập trình xây dựng các đối tƣợng lãng phí bộ nhớ, ngơn ngữ C++ cho phép chúng ta thiết kế các lớp cĩ các phƣơng thức ảo khơng làm gì cả gọi ph ng thức thuần ảo, và cũng

khơng thể tạo ra đối tƣợng thuộc lớp đĩ. Những lớp nhƣ vậy (lớp cĩ chứa phƣơng thức thuần ảo) gọi là lớp trừu tƣợng.

Ví dụ xét các lớp Hình trịn, Tam giác, Hìn vuơng kế thừa từ lớp Hình. Trong ví dụ này các hàm trong lớp Hình cĩ nội dung nhƣng nội dung khơng cĩ ý nghĩa. Đồng thời ta luơn luơn cĩ thể tạo đƣợc đối tƣợng lớp Hình, điều này khơng đúng với tƣ tƣởng của phƣơng pháp lập trình hƣớng đối tƣợng.

Ta cĩ thể thay thế cho nội dung khơng cĩ ý nghĩa bằng phƣơng thức thuần ảo. class Nguoi { protected: char *hoTen; Int namSinh; public:

Nguoi(char *ht, int ns):namSinh(ns) {hoTen = strdup(ht);}

virtual ~Nguoi() {delete [] hoTen;} };

Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 93 Nhƣ vậy lớp cơ sở trừu tƣợng là lớp cơ sở khơng cĩ đối tƣợng nào và chỉ sử dụng để cho các lớp khác kế thừa.

Phƣơng thức thuần ảo đƣợc khai báo trong lớp sẽ làm cho lớp đĩ trở thành lớp cơ sở trừu tƣợng.

Cú pháp khai báo phƣơng thức thuần ảo:

virtual KieuTraVe TenHam(danh sach tham so)=0

Lƣu ý: Tất cả các lớp dẫn xuất đều phải định nghĩa lại phƣơng thức thuần ảo. Ví dụ về lớp cơ sở trừu tƣợng và phƣơng thức thuần ảo:

class Animal {

public:

virtual void talk()=0; };

class Cat:public Animal {

public:

void talk() {cout<<”Meo meo !”;} };

class Dog:public Animal {

public:

void talk() {cout<<”Gau gau !”;} };

Void main() {

Animal a; //sai

Animal *p = new Animal; //sai Animal *q = new Cat; //Đúng q->talk();

Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 94

TỔNG KẾT CHƢƠNG

- Nhƣ vậy tính đa hình trong lập trình hƣớng đối tƣợng chỉ đƣợc thể hiện khi: o Cĩ quan hệ kế thừa

o Phƣơng thức đĩ phải là phƣơng thức ảo

o Phƣơng thức đĩ phải đƣợc khai báo trùng tên trong cả lớp cơ sở và lớp dẫn xuất

o Phải gọi phƣơng thức thơng qua con trỏ

- Khi phƣơng thức ảo tại lớp cơ sở khơng cĩ nội dung thì chúng ta sẽ khai báo phƣơng thức ảo này trở thành thuần ảo.

CÂU HỎI VÀ BÀI TẬP

1. Hiện tƣợng đa hình là gì? Nĩ đƣợc thể hiện nhƣ thế nào khi cài đặt, hãy cho ví dụ cụ thể?

2. Phƣơng thức ảo là gì?

3. Nêu những điều kiện để thể hiện đƣợc tính đa hình.

4. Phƣơng thức thuần ảo là gì? Khi nào thì sử dụng phƣơng thức thuần ảo? 5. Lớp cơ sở trừu tƣợng là gì?

6. Viết một ứng dụng cho phép tạo ra một mảng các đối tƣợng, mỗi đối tƣợng thuộc một trong các loại: hình chữ nhật, vuơng, trịn, tam giác. Chƣơng trình gồm cĩ những chức năng sau:

a. Nhập danh sách các hình b. Xuất danh sách các hình

c. Xuất diện tích từng hình trong mảng và xuất tổng diện tích

7. Một cơng ty quản lý tiền lƣơng nhân viên, mỗi nhân viên đều cĩ mã số, họ tên, năm sinh. Lƣơng của mỗi loại nhân viên đƣợc tính khác nhau.

 Dạng ngƣời lao động lãnh lƣơng từ ngân sách Nhà nƣớc đƣợc gọi là cán bộ, cơng chức (dạng biên chế).

 Dạng ngƣời lao động nhận lƣơng từ ngân sách cơ quan đƣợc gọi là nhân viên hợp đồng.

Nhƣ vậy, hệ thống quản lý cĩ hai loại nhân viên là nhân viên biên chế (NVBC) và nhân viên hợp đồng (NVHD)

Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 95  NVBC: gồm các đối tƣợng là cán bộ, cơng chức cĩ các thuộc tính:

lƣơng căn bản, hệ số lƣơng, tiền phụ cấp chức vụ. Lƣơng = lƣơng căn * hệ số lƣơng * tiền phụ cấp

 NVHD: gồm các đối tƣợng làm hợp đồng gồm các thuộc tính: tiền cơng lao động một giờ, số giờ làm việc trong tháng.

Lƣơng =Tiền cơng lao động một giờ * số giờ làm việc trong tháng Xây dựng các phƣơng thức nhập, xuất thơng tin và phƣơng thức tính tiền lƣơng của mỗi loại nhân viên.

Viết chƣơng trình để quản lý tiền lƣơng trong cơng ty:

a) Cho phép ngƣời dùng nhập vào số lƣợng (n) nhân viên trong cơng ty. b) Xây dựng hàm nhập thơng tin cho n nhân viên đĩ

c) Xây dựng hàm xuất thơng tin cho n nhân viên đĩ

d) Xây dựng hàm tính tổng tiền lƣơng phải trả trong tháng

e) Xây dựng để tìm và xuất thơng tin của nhân viên của nhân viên cĩ lƣơng cao nhất, thấp nhất trong cơng ty.

Void Min_Max(NHANVIEN* nv[], int n)

8. Cơng ty XYZ cần xây dựng một ứng dụng quản lý nhân sự và tính lƣơng cho nhân viên trong cơng ty nhƣ sau:

Quản lý thơng tin về nhân viên: Họ tên, ngày sinh, địa chỉ. Biết ngày sinh là một đối tƣợng của lớp NgaySinh gồm 3 thơng tin (Ngày, Tháng, Năm) Tính lƣơng cho nhân viên:

Hiện cơng tycĩ 3 loại nhân viên và cách tính lƣơng tƣơng ứng cho từng loại nhân viên nhƣ sau:

 Nhân viên sản xuất: Lƣơng = số sản phẩm * 3000  Nhân viên cơng nhật: Lƣơng = số ngàylàm * 40 000

Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 96

(1). Xây dựng lớp NgaySinh với các thành phần thuộc tính kiểu int (Ngày,

Tháng, Năm ) và phƣơng thức NhapNS (nhập ngày sinh), XuatNS (xuất

dƣới dạng: ví dụ 25-2-1987)

(2). Xây dựng các lớp (NHANVIEN, NVSX (nhân viên sản xuất), NVCN (nhân viên cơng nhật)) với các thành phần thuộc tính và phƣơng thức

Nhập, Xuất và Tính lƣơng.

(3). Viết chƣơng trình cho phép quản lý nhân viên trong cơng ty nhƣ sau:

a. Hàm nhập danh sách gồm nhiều nhân viên (nhập số -1 để kết thúc việc nhập)

b. Hàm xuất thơng tin các nhân viên trong cơng ty

c. Hàm tìm nhân viên cĩ lƣơng cao nhất với cấu trúc sau:

NHANVIEN* TIMnv(NHANVIEN* nv[ ] , int n) // n là số lƣợng

Tài liệu giảng dạy Lập Trình Hƣớng Đối Tƣợng 97

Một phần của tài liệu Lập trình hướng đối tượng (Trang 93 - 98)

Tải bản đầy đủ (PDF)

(111 trang)