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

Thừa kế trong lập trình C

15 288 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 15
Dung lượng 332 KB

Nội dung

 Nội dung  Khái niệm  Định nghĩa lớp dẫn xuất  Các thành phần thừa kế  Phạm vi truy nhập các thành phần của lớp cơ sở... Nhận xét: Một lớp dẫn xuất ngoài các thành phần của riêng n

Trang 1

CHƯƠNG 9: THỪA KẾ

Mục tiêu

 Giúp sinh viên hiểu sâu hơn về tính Thừa kế trong lập trình HĐT, cách định nghĩa lớp thừa kế và các thành phần liên quan

Nội dung

 Khái niệm

 Định nghĩa lớp dẫn xuất

 Các thành phần thừa kế

 Phạm vi truy nhập các thành phần của lớp cơ sở

Trang 2

- Lớp dẫn xuất là lớp được xây dựng bằng việc thừa kế từ

một lớp khác Lớp được thừa kế gọi là lớp cơ sở.

- Một lớp có thể là dẫn xuất từ một hoặc nhiều lớp cơ sở nhưng cũng có thể là lớp cơ sở để xây dựng các lớp dẫn xuất

Ví dụ: Lớp B là lớp dẫn xuất của lớp A nhưng cũng có thể

là lớp cơ sở của lớp C

Một lớp nào đó có thể được dẫn xuất từ nhiều lớp cơ sở

Khái niệm

Trang 3

Nhận xét:

Một lớp dẫn xuất ngoài các thành phần của riêng nó còn được thừa kế tất cả các thành phần của các lớp cơ sở liên quan

Khái niệm

Trang 4

Cú pháp:

class Tên_lớp dẫn xuất: public/ private lớp_cơ sở

{ khai báo các thuộc tính

public:

khai báo, định nghĩa các phương thức };

Trong đó:

- Từ khóa public hoặc private cho biết lớp dẫn xuất thừa

kế từ lớp cơ sở theo kiểu public hoặc private

- Nếu không nêu rõ public hay private thì ngầm định là

private

Định nghĩa lớp dẫn xuất

Trang 5

- Nếu kế thừa theo dạng public thì tất cả các thành phần

public của lớp cơ sở cũng là thành phần public của lớp dẫn xuất

- Nếu kế thừa theo dạng private thì tất cả các thành phần

public của lớp cơ sở sẽ là thành phần private của lớp dẫn xuất

Định nghĩa lớp dẫn xuất

Trang 6

- Thừa kế dữ liệu: Có nghĩa là các thuộc tính của lớp cơ sở được thừa kế trong lớp dẫn xuất

- Lúc này, thuộc tính của lớp dẫn xuất = thuộc tính lớp cơ

sở + thuộc tính riêng

- Tuy nhiên, trong lớp dẫn xuất không được phép truy nhập đến các thuộc tính private của lớp cơ sở

Ví dụ:

Class LOP1

{

kdl thuoc_tinh1.1, thuoc_tinh 1.2, …;

public: … }

Các thành phần thừa kế

Trang 7

class LOP2

{ kdl thuoc_tinh2.1, thuoc_tinh 2.2, …;

public: … }

Class LOP3: public LOP2, LOP1

{ kdl thuoc_tinh1, thuoc_tinh2, …;

public:…

}

⇒ Hãy xác định tập thuộc tính của LOP3?

Các phương thức của LOP3 được thao tác trên thuộc tính nào?

Các thành phần thừa kế

Trang 8

- Thừa kế phương thức: Trừ hàm tạo, hàm hủy của lớp cơ

sở Tất cả các phương thức của lớp cơ sở đều được thừa

kế trong lớp dẫn xuất

Các thành phần thừa kế

Trang 9

- Các thành phần private của lớp cơ sở không được phép truy nhập trong lớp dẫn xuất

- Do đó, nếu muốn truy nhập vào thành phần nào đó trong lớp cơ sở từ lớp dẫn xuất thì ta cần khai báo dưới dạng

public hoặc protected

- Có sự khác nhau giữa public và protected

Nếu thành phần được khai báo bởi public thì được truy nhập bất cứ đâu trong chương trình Còn khai báo bằng

protected thì chỉ được truy nhập trong lớp cơ sở và lớp dẫn xuất trực tiếp

Phạm vi truy nhập đến các thành phần

của lớp cơ sở

Trang 10

- Để phân biệt được các thành phần của các lớp, ta cần sử dụng tên lớp + toán tử dẫn xuất :: đặt trước tên thành phần

Ví dụ:

Giả sử ta có lớp C kế thừa từ 2 lớp A và B

Khi đó:

C h; khai báo đối tượng thuộc lớp C

h.C::n là thuộc tính n được khai báo trong C

h.A::n là thuộc tính n được khai báo trong A

h.A::pthuc() là phương thức trong A

h.B::pthuc() là phương thức trong B

Sử dụng các thành phần của lớp dẫn xuất

Trang 11

- Xây dựng lớp HCN

Gồm các thuộc tính: d, r

Các phương thức nhập: nhapdl(), dientich(), chuvi()

=> Xây dựng lớp HHOPCN kế thừa từ lớp HCN

Khai báo một đối tượng HHOPCN, hiển thị ra màn hình chuvi, diện tích đáy, diện tích toàn phần và thể tích của nó

Ví dụ

Trang 12

- Với các thuộc tính khai báo trong lớp dẫn xuất ta sử dụng lệnh gán như thông thường

- Các thành phần kiểu đối tượng Để khởi gán giá trị cho các đối tượng này cần sử dụng hàm tạo của lớp tương ứng

- Các thuộc tính kế thừa từ lớp cơ sở Để khởi gán cho các thuộc tính này cần sử dụng hàm tạo của lớp cơ sở

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

Trang 13

Ví dụ:

Ta có lớp A:

class A

{

double a;

public :

A( double x) { a=x; }

void in() { cout<<"a="<<a<<endl; } };

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

Trang 14

Lớp B:

class B

{ double b;

public :

B( double x) { b=x; }

void in() { cout<<"b="<<b<<endl; } };

Yêu cầu:

Định nghĩa lớp C kế thừa từ lớp B, có thuộc tính có kiểu đối tượng của lớp A

Xây dựng hàm tạo và phương thức in() để hiển thị cả a, b, c.

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

Trang 15

- Xây dựng lớp NGUOI gồm thuộc tính: hoten Các phương thức: nhap(), xuat().

+ Xây dựng lớp SINHVIEN kế thừa từ lớp NGUOI và bổ sung các thuộc tính: Masinhvien, d1,d2,d3; các phương thức: nhap(), tinhdiem(), xuat() Với công thức tính điểm (d1+d2+d3*2)/4

+ Xây dựng lớp NHANVIEN kế thừa từ lớp NGUOI và bổ sung các thuộc tính Manhanvien, hesoluong, phucap; Các phương thức: nhap(), tinhluong(), xuat().

với công thức tính lương: 830*hesoluong+phucap

Bài tập thực hành

Ngày đăng: 20/10/2014, 16:44

TỪ KHÓA LIÊN QUAN

w