Bài giảng Lập trình hướng đối tượng: Phần 2 - ĐH Sư phạm kỹ thuật Nam Định

166 13 0
Bài giảng Lập trình hướng đối tượng: Phần 2 - ĐH Sư phạm kỹ thuật Nam Định

Đ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

Tiếp nội dung phần 1, Bài giảng Lập trình hướng đối tượng: Phần 2 cung cấp cho người học những kiến thức như: Dẫn xuất và thừa kế; Khuôn hình; Các dòng xuất nhập;...Mời các bạn cùng tham khảo!

Lập trình h-ớng đối t-ợng Ch-ơng 3: Dẫn xuất thừa kế Nội dung ch-ơng tập trung trình bày vấn đề sau: Khái niệm lớp sở, lớp dẫn xuất Cách xây dựng lớp dẫn xuất Các kiểu thừa kế Phạm vi truy xuất đến thành phần lớp sở Hàm tạo, hàm huỷ, toán tử gán với tính thừa kế Thừa kế nhiều mức trùng tên Lớp sở ảo Ph-ơng thức tĩnh, ph-ơng thức ¶o 3.1 Sù dÉn xuÊt vµ tÝnh thõa kÕ 3.1.1 Lớp sở lớp dẫn xuất Lập trình h-ớng đối t-ợng có hai đặc tr-ng bản: Đóng gói liệu, đ-ợc thể cách dùng khái niệm lớp để biểu diễn đối t-ợng với thuộc tính private, cho phép bên truy nhập vào thông qua ph-ơng thức Dùng lại mÃ, thể việc thừa kế lớp Việc thừa kế cho phép lớp thừa kế (gọi lớp dẫn xuất) sử dụng lại ph-ơng thức đà đ-ợc định nghĩa lớp gốc (gọi lớp sở) Một lớp đ-ợc dẫn xuất từ nhiều líp c¬ së, mét líp c¬ së cịng cã thĨ lớp sở nhiều lớp dẫn xuất 3.1.2 Cách xây dựng lớp dẫn xuất Cú pháp khai báo mét líp thõa kÕ tõ mét líp kh¸c nh- sau: class : { // Khai báo thành phần cđa líp }; Trong ®ã: Trang - 88 - LËp trình h-ớng đối t-ợng Tên lớp dẫn xuất: tên lớp đ-ợc cho thừa kế từ lớp khác Tên lớp tuân thủ theo quy tắc đặt tên biến C++ Tên lớp cở sở: tên lớp đà đ-ợc định nghĩa tr-ớc lớp khác thừa kế Tên lớp tuân thủ theo quy tắc đặt tên biến C++ Từ khóa dẫn xuất: từ khóa quy định tính chất thừa kế Có ba tõ khãa dÉn xuÊt lµ private, protected vµ public VÝ dô 3.1: class Bus: public Car { …// Khai báo thành phần }; khai báo lớp Bus (xe bt) thõa kÕ tõ líp Car (xe « tô) với tính chất thừa kế public 3.1.3 Các kiĨu thõa kÕ Sù thõa kÕ cho phÐp líp dÉn xt cã thĨ sư dơng l¹i mét sè m· nguồn ph-ơng thức thuộc tính đà đ-ợc định nghĩa lớp sở Nghĩa lớp dẫn xt cã thĨ truy nhËp trùc tiÕp ®Õn mét sè thành phần lớp sở Tuy nhiên, phạm vi truy nhập từ lớp dẫn xuất đến lớp sở giống nhau: chúng đ-ợc quy định từ khóa dẫn xuất private, protected public Thừa kế private Theo kiểu thừa kế này: Các thành phần private lớp sở truy nhập đ-ợc từ lớp dẫn xuất Các thành phần protected lớp sở trở thành thành phần private lớp dẫn xuất Các thành phần public lớp sở trở thành thành phần private lớp dẫn xuất Phạm vi truy nhập từ bên vào lớp dẫn xuất đ-ợc tuân thủ nh- quy tắc phạm vi lớp thông th-ờng Thừa kế protected Theo kiểu thừa kế này: Trang - 89 - Lập trình h-ớng đối t-ợng Các thành phần private lớp sở truy nhập đ-ợc từ lớp dẫn xuất Các thành phần protected lớp sở trở thành thành phần protected lớp dẫn xuất Các thành phần public lớp sở trở thành thành phần protected lớp dẫn xuất Phạm vi truy nhập từ bên vào lớp dẫn xuất đ-ợc tuân thủ nh- quy tắc phạm vi lớp thông th-ờng Thừa kế public Theo kiểu thừa kế này: Các thành phần private lớp sở truy nhập đ-ợc từ lớp dẫn xuất Các thành phần protected lớp sở trở thành thành phần protected lớp dẫn xuất Các thành phần public lớp sở thành phần public lớp dẫn xuất Phạm vi truy nhập từ bên vào lớp dẫn xuất đ-ợc tuân thủ nh- quy tắc phạm vi lớp thông th-ờng 3.1.4 Thừa kế thành phần liệu Các thuộc tính lớp sở đ-ợc thõa kÕ líp dÉn xuÊt Nh- vËy, tËp thuéc tÝnh líp dÉn xt sÏ bao gåm: c¸c thc tính khai báo lớp dẫn xuất thuộc tính mà lớp dẫn xuất đ-ợc thừa kế từ lớp sở có liên quan Tuy vậy, ph-ơng thức lớp dẫn xuất không đ-ợc phép truy nhập vào thuộc tính private lớp sở Tên thuộc tính lớp dẫn xuất lớp sở đặt trùng Ví dô 3.2: class Sinhvien { private: char *MaSV; char *TenSV; char *Diachi; char *Gioitinh; Trang - 90 - LËp tr×nh h-ớng đối t-ợng float DiemToanCC; float DiemVatly; float DiemAnhvan; public: void nhap(); void hienthi(); }; class SinhvienCNTT:Sinhvien { private: float DiemLTC; float DiemCSDL; public: void nhap(); void hienthi(); int Xet_hocbong(); }; Khi lớp SinhvienCNTT thuộc tính DiemLTC, DiemCSDL có thuộc tính: MaSV, TenSV, Diachi, Gioitinh, DiemToanCC, DiemVatly, DiemAnhvan đ-ợc thừa kế từ lớp Sinhvien 3.1.5 Thừa kế ph-ơng thức Trừ: Hàm tạo, hàm huỷ toán tử gán, ph-ơng thức (public) khác lớp sở đ-ợc thừa kế lớp dẫn xuất Tên ph-ơng thức lớp dẫn xuất lớp sở đặt trùng Ví dụ 3.3: #include #include #include #include #include #define MAX_TEN 50 #define MAX_MASO #define MUC_CO_BAN 830000 Trang - 91 - LËp tr×nh h-íng ®èi t-ỵng class Nguoi { protected: char HoTen[MAX_TEN]; char MaSo[MAX_MASO]; float Luong; public: Nguoi(); void Xuat(); void Nhap(); virtual void TinhLuong()=0; }; Nguoi::Nguoi() { strcpy(HoTen,""); strcpy(MaSo,""); Luong=0; } void Nguoi::Xuat() { cout

Ngày đăng: 08/06/2021, 14:19

Tài liệu cùng người dùng

Tài liệu liên quan