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

Bài giảng kỹ thuật lập trình hệ cơ điện tử chương 11 ts đặng thái việt

22 7 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Chương 11: Kế Thừa Và Đa Hình
Người hướng dẫn TS. Đặng Thái Việt
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Kỹ Thuật Lập Trình Hệ Cơ Điện Tử
Thể loại Bài giảng
Năm xuất bản 2017
Thành phố Hà Nội
Định dạng
Số trang 22
Dung lượng 564,43 KB

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

Nội dung

K THU T L P TRÌNH H C ĐI N Ỹ Ậ Ậ Ệ Ơ Ệ TỬ Programming Engineering in Mechatronics 1 TR NG Đ I H C BÁCH KHOA HÀ N IƯỜ Ạ Ọ Ộ Gi ng viênả TS Đ ng Thái Vi tặ ệ Đ n vơ ị B môn C đi n t , Vi n C khíộ ơ ệ ử[.]

Trang 2

1. T ng quan v  ngôn ng  l p trìnhổ ề ữ ậ

2. Gi i thi u s  b  ngôn ng  Cớ ệ ơ ộ ữ

3. Ki u, toán t  và bi u th c ể ử ể ứ

Trang 4

• Lớp đang tồn tại này được gọi là Base Class - lớp cơ

sở, và lớp mới được xem như là Derived Class – lớp

thừa kế

Trang 5

K  th a ế ừ

L p c  s  (Base Class) và L p th a k  (Derived Class)  ớ ơ ở ớ ừ ế

trong C++

• Một lớp có thể được kế thừa từ hơn một lớp khác, nghĩa

là, nó có thể kế thừa dữ liệu và hàm từ nhiều lớp cơ sở

• Để định nghĩa một lớp kế thừa (Derived Class), chúng ta

sử dụng một danh sách để xác định các lớp cơ sở Danh sách này liệt kê một hoặc nhiều lớp cơ sở và có form sau:

Trang 6

K  th a ế ừ

Ví dụ

Trang 7

K  th a ế ừ

Ví dụ

Trang 8

K  th a ế ừ

Đi u khi n truy c p và Tính k  th a trong C++ ề ể ậ ế ừ

Ø Một lớp kế thừa có thể truy cập tất cả thành viên không phải là private của lớp cơ sở của nó Vì thế, các thành viên lớp cơ sở, mà là hạn chế truy cập tới các hàm thành viên của lớp kế thừa, nên được khai báo là private trong lớp cơ sở.

Ø Chúng ta tổng kết các kiểu truy cập khác nhau, tương ứng với ai đó có thể truy cập chúng như sau:

Trang 9

K  th a ế ừ

Ø Một lớp kế thừa (Derived Class) sẽ kế thừa tất cả các

phương thức của lớp cơ sở, ngoại trừ:

§ Constructor, destructor và copy constructor của lớp cơ sở

§ Overloaded operator (toán tử nạp chồng) của lớp cơ sở

§ Hàm friend của lớp cơ sở

Trang 10

của lớp có sở trở thành các thành viên protected của lớp

kế thừa Một thành viên là private của lớp cơ sở là không bao giờ có thể được truy cập trực tiếp từ một lớp kế thừa, nhưng có thể truy cập thông qua các lời gọi tới các thành viên public và protected của lớp cơ sở đó

Trang 11

K  th a ế ừ

Ki u k  th a trong C++ ể ế ừ

§ Kiểu kế thừa protected: Khi kế thừa từ một lớp cơ sở là

protected, thì 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 kế thừa

§ Kiểu kế thừa private: Khi kế thừa từ một lớp cơ sở là

private, thì 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 kế thừa

Trang 12

Tại đây, access_modifier là public, protected hoặc private

và sẽ được cung cấp cho mỗi lớp cơ sở, và chúng sẽ được phân biệt với nhau bởi dấu phảy như trên

Trang 13

K  th a ế ừ

Ví dụ

Trang 14

K  th a ế ừ

Ví dụ

Trang 15

K  th a ế ừ

Ví dụ

Trang 16

Đa hình

Đa hình trong C++

Ø Đa hình (polymorphism) nghĩa là có nhiều hình thái khác

nhau Tiêu biểu là, đa hình xuất hiện khi có một cấu trúc

cấp bậc của các lớp và chúng là liên quan với nhau bởi tính

kế thừa

Ø Đa hình trong C++ nghĩa là một lời gọi tới một hàm thành viên sẽ làm cho một hàm khác để được thực thi phụ thuộc vào kiểu của đối tượng mà triệu hồi hàm đó

Trang 17

Ví dụ

Đa hình

Trang 18

Ví dụ

Đa hình

Trang 19

Ví dụ

Lý do cho output không chính xác đó là vì: lời gọi của hàm

dientich() đang được thiết lập một lần bởi compiler như phiên

bản được định nghĩa trong lớp cơ sở đó Điều này gọi là static

resolution (sự phân giải tĩnh) của lời gọi hàm, hoặc static linkage (sự liên hợp tĩnh) – lời gọi hàm được sửa trước khi

chương trình được thực thi Đôi khi nó cũng được gọi là early

binding (hoặc static binding) bởi vì hàm dientich() được thiết

lập trong khi biên dịch chương trình

Đa hình

Trang 20

Đa hình

Ví dụ

Bây giờ, chúng ta sửa chương trình trên một chút và đặt trước dòng int

dientich() trong lớp Hinh với từ khóa virtual, khi đó nó trông như sau:

Trang 21

Đa hình

Hàm virtual trong C++

Ø Một hàm virtual là một hàm trong một lớp cơ sở mà được

khai báo bởi sử dụng từ khóa virtual trong C++ Việc định nghĩa trong một lớp cơ sở một hàm virtual, với phiên bản khác trong một lớp kế thừa, báo cho compiler rằng: chúng

ta không muốn Static Linkage cho hàm này

Ø Những gì chúng ta làm là muốn việc lựa chon hàm để được gọi tại bất kỳ điểm nào đã cung cấp trong chương trình là dựa trên kiểu đối tượng, mà với đó nó được gọi Hoạt động

này có thể gọi tắt là dynamic linkage, hoặc late binding

trong C++

Trang 22

Đa hình

Hàm pure virtual trong C++

Ø Nó là có thể nếu bạn muốn bao một hàm virtual trong một lớp cơ sở,

để mà nó có thể được tái định nghĩa trong một lớp kế thừa để phù hợp với các đối tượng của lớp đó, nhưng đó là định nghĩa không có ý nghĩa gì.

=0 nói cho compiler rằng hàm đó không có phần thân và hàm virtual trên sẽ được

gọi là hàm pure virtual function trong C++

Ngày đăng: 07/02/2023, 22:15

TỪ KHÓA LIÊN QUAN

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