1. Trang chủ
  2. » Công Nghệ Thông Tin

5 kethua

4 133 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 84 KB

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

Nội dung

Ví dụ: Phân cấp lớp Shape • Các thành viên protected − Các thành viên public của một lớp cơ sở được truy cập bởi tất cả các hàm trong chương trình.. Các thành viên protected của một lớp

Trang 1

HỌC VIỆN KỸ THẬT QUÂN SỰ

HỌC PHẦN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Bộ môn: Công nghệ phần mềm

Giáo viên: 1) Phạm Thị Bích Vân

Bài V: Cơ chế kế thừa

1 Thời lượng: 9 tiết (GV giảng: 3; bài tập: 3; thực hành: 3)

2 Mục đích, yêu cầu: Giới thiệu sinh viên khái niệm ý nghĩa của kế thừa, đơn kế thừa, đa kế thừa Cách xây dựng lớp kế thừa

3 Nội dung:

a) Nội dung chi tiết:

Giới thiệu

− Kế thừa là khả năng cho phép xây dựng một lớp mới:

+ Được thừa hưởng các thành phần từ một hay nhiều lớp đã có (lớp cơ sở)

+ Trong lớp ta có thể bổ sung thêm các thành phần hoặc định nghĩa lại các thành phần

− Ví dụ

+ Xây dựng lớp PS1 {ts, ms, nhập, in, tối giản}

+ Lớp PS2 {ts, ms, nhập, in, tối giản, cộng, trừ, nhân chia phân số}

Kế thừa đơn.

Chỉ có một lớp cơ sở

Các lớp cơ sở và các lớp dẫn xuất.

− Sự kế thừa hình thành các cấu trúc phân cấp giống cây (còn gọi là cây phả hệ) Một lớp cơ sở tồn tại trong một phân cấp quan hệ với lớp dẫn xuất của nó

− Một lớp có thể là một lớp cơ sở mà cung cấp các thuộc tính và các hành vi cho các lớp khác, hoặc là lớp trở thành một lớp dẫn xuất mà kế thừa các thuộc tính và các hành vi

− Lớp được kế thừa gọi là lớp cơ sở (lớp cha)

− Lớp kế thừa gọi là lớp dẫn xuất (lớp con)

Ví dụ: Phân cấp lớp Shape

Các thành viên protected

Các thành viên public của một lớp cơ sở được truy cập bởi tất cả các hàm trong chương trình Các thành viên private của một lớp cơ sở chỉ được truy cập bởi các hàm thành viên và các hàm friend của lớp cơ sở.

Truy cập protected phục vụ như một mức trung gian của sự bảo vệ giữa truy cập public và truy cập private Các thành viên protected của một lớp cơ sở có thể chỉ được truy cập bởi các hàm thành viên và các hàm friend của lớp cơ sở và bởi các hàm thành viên và các hàm friend của

lớp dẫn xuất

Các thành viên lớp dẫn xuất kế thừa public có thể truy xuất tới các thành viên public và protected bằng cách sử dụng các tên thành viên.

Trang 2

Ép kiểu các con trỏ lớp cơ sở tới các con trỏ lớp dẫn xuất.

Một đối tượng của lớp dẫn xuất kế thừa public có thể ép về đối tượng thuộc lớp cơ sở, ngược lại không đúng Tuy nhiên có thể sử dụng ép kiểu để chuyển đổi một con trỏ lớp cơ sở thành một con trỏ lớp dẫn xuất

Định nghĩa lại các thành viên lớp cơ sở trong một lớp dẫn xuất.

Một lớp dẫn xuất có thể định nghĩa lại một hàm thành viên lớp cơ sở Điều này được gọi là overriding Khi hàm đó được đề cập bởi tên trong lớp dẫn xuất, phiên bản của lớp dẫn xuất được chọn một cách tự động Toán tử định phạm vi có thể sử dụng để truy cập phiên bản của lớp cơ sở

từ lớp dẫn xuất

Các lớp cơ sở public, protected, private

Khi dẫn xuất một lớp từ một lớp cơ sở, lớp cơ sở có thể được kế thừa là public, protected và private.

class <drived_class_name> : <type_of_inheritance> <base_class_name>

{………

};

Trong đó type_of_inheritance là public, protected hoặc private Mặc định là private.

Khi dẫn xuất một lớp từ một lớp cơ sở public, các thành viên public của lớp cơ sở trở thành các thành viên public của lớp dẫn xuất, và các thành viên protected của lớp cơ sở trở thành các thành viên protected của lớp dẫn xuất Các thành viên private của lớp cơ sở không bao giờ

được truy cập trực tiếp từ một lớp dẫn xuất

Khi dẫn xuất một lớp từ một lớp cơ sở protected, các thành viên public và protected của lớp cơ

sở trở thành các thành viên protected của lớp dẫn xuất Khi dẫn xuất một lớp từ một lớp cơ sở private, các thành viên public và protected của lớp cơ sở trở thành các thành viên private của

lớp dẫn xuất

Các constructor và destructor và lớp dẫn xuất

− Khi một đối tượng của lớp dẫn xuất được khởi động, constructor lớp cơ sở phải được gọi để khởi tạo các thành viên lớp cơ sở của lớp dẫn xuất Nếu constructor lớp dẫn bị bỏ qua, constructor mặc định lớp dẫn gọi constructor lớp cơ sở

− Các destructor được gọi theo thứ tự ngược lại thứ tự gọi các constructor, vì thế destructor lớp dẫn xuất được gọi trước destructor lớp cơ sở của nó

Chuyển đổi ngầm định đối tượng lớp dẫn xuất sang đối tượng lớp cơ sở

Một con trỏ trỏ tới một đối tượng lớp dẫn xuất có thể được chuyển đổi ngầm định thành một con trỏ trỏ tới một đối tượng lớp cơ sở bởi vì một đối tượng lớp dẫn xuất là một đối tượng lớp cơ sở

Đa kế thừa

− Một lớp có thể được dẫn xuất từ nhiều lớp cơ sở, sự dẫn xuất như vậy được gọi là đa kế thừa Đa

kế thừa có nghĩa là một lớp dẫn xuất kế thừa các thành viên của các lớp cơ sở khác nhau Khả năng mạnh này khuyến khích các dạng quan trọng của việc sử dụng lại phần mềm, nhưng có thể sinh ra các vấn đề nhập nhằng

− Cú pháp của một lớp kế thừa nhiều lớp cơ sở:

class <drived_class_name> : <type_of_inheritance> <base_class_name1> ,

<type_of_inheritance> <base_class_name2>, …

{

………

};

Trang 3

Các lớp cơ sở ảo

− Đôi khi trong lập trình một lớp A là cơ sở của lớp B,C Lớp D lại kế thừa từ B,C Khi đó khi từ lớp D ta gọi đến thành phần của lớp A khi đó chương trình có sự nhập nhằng

− Giải pháp: Khai báo lớp A là lớp cơ sở ảo với từ khóa virtual Khi Hai lớp cơ sở A ở trên bất giờ

sẽ trở thành một lớp cơ sở A duy nhất cho bất kỳ lớp dẫn xuất nào từ B và C Điều này có nghĩa

là D chỉ có một cơ sở của lớp A, vì vậy tránh được sự nhập nhằng

b) Nội dung thảo luận: Sự khác nhau của các kiểu kế thừa, hàm khởi tạo trong kế thừa

c) Nội dung tự học: Xây dựng các lớp kế thừa, tạo các hàm tạo của lớp dẫn xuất

d) Bài tập (bắt buộc, mở rộng):

Bài 1:

Cài đặt lớp PS1 gồm có:

Dữ liệu: tử số, mẫu số

Phương thức: nhập ps(mẫu khác 0), in ps, tối giản, cộng 2 ps Chương trình chính: nhập 2 ps ab, in ra c=a+b

Cài đặt lớp PS2 kế thừa PS1 và bổ sung:

Dữ liệu: dấu của phân số Phương thức: phép so sánh: ==, !=

Chương trình chính: nhập 2 ps, thông báo kết quả so sánh Bài 2:

Cài đặt lớp SP1 gồm có:

Dữ liệu: phần thực, phần ảo Phương thức: nhập,in Chương trình chính: nhập 2 sp ab, in ra a, b Cài đặt lớp SP2 kế thừa SP1 và bổ sung:

Dữ liệu:

Phương thức: toán tử +, -, *, /, phép so sánh: ==, !=, >, >=, <, <=, ++, Chương trình chính: nhập 2 sp, thông báo kết quả so sánh, các phép tính a+b, a-b, a*b, a/c Bài 3:

Cài đặt lớp NGUOI gồm có:

Dữ liệu: họ tên, ngày sinh, địa chỉ Phương thức: nhập,in một người Cài đặt lớp NV kế thừa NGUOI và bổ sung:

Dữ liệu: phòng ban, hệ số lương, phụ cấp Phương thức: định nghĩa lại pt nhập, in để có đầy đủ thông tin Chương trình chính: nhập mảng các NV có n người (n<20), in danh sách nhân viên Bài 4:

Cài đặt lớp People

Dữ liệu: họ tên Cài đặt lớp Student kế thừa lớp People có:

Dữ liệu: SIS (Mã sinh viên), khoa, điểm trung bình Thêm các thuộc tính cho các dữ liệu thành viên trên Viết các phương thức hiển thị thông tin của sinh viên Bài 5:

Cài đặt lớp có tên là Book chứa những dữ liệu cần thiết để quản lý sách trong một cửa hàng sách

Dữ liêu: tên sách, tác giả, nhà xuất bản, giá sách, số lượng hiện có và tổng số các loại sách đang có trong cửa hàng

Trang 4

Chương trình chính cho phép người dùng nhập vào từng cuốn sách, lưu các đối tượng sách trong một mảng, hiển thị tất cả các sách và bán đi một cuốn sách bằng cách giảm tổng số lượng cuốn sách đi 1

4 Tài liệu tham khảo (sách, báo – chi tiết đến chương, mục, trang)

• Lập trình hướng đối tượng với C++ / Lê Đăng Hưng, Tạ Tuấn Anh, Nguyễn Hữu Đức, Nguyễn Thanh Thủy (Chủ biên), - Hà Nội : Khoa học và Kỹ thuật, 2009 -346 trang Chương V

• Giáo trình C++ & lập trình hướng đối tượng / Phạm Văn Ất (Chủ biên), Lê Trường Thông – Hà Nội : Hồng Đức, 2009 -495 trang Chương 5

• Object-Oriented Programming in C++ (4th Edition) / Robert Lafore Sams Publishing, 2002 Chapter 9

5 Câu hỏi ôn tập

- Ý nghĩa từ khóa định nghĩa phạm vi truy cập protected?

- Có các kiểu kế thừa nào? Ý nghĩa của các kiểu?

- Thế nào là đơn kế thừa?

- Thế nào là đa kế thừa?

- Cách định nghĩa lại các thành viên của lớp cơ sở trong lớp dẫn xuất?

- Cách xây dựng các hàm khởi tạo của lớp dẫn xuất?

- Thế nào là lớp cơ sở ảo?

Ngày đăng: 18/10/2017, 04:42

Xem thêm

w