Bài giảng Lập trình hướng đối tượng C++ - Chương 8: Thừa kế
lượt xem 8
download
Bài giảng Lập trình hướng đối tượng C++ - Chương 8: Thừa kế cung cấp cho người học những kiến thức như: Thừa kế đơn; Thừa kế bội; Liên kết tĩnh và liên kết động. Mời các bạn cùng tham khảo!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình hướng đối tượng C++ - Chương 8: Thừa kế
- Chương 8 THỪA KẾ 1
- Nội dung • Thừa kế đơn • Thừa kế bội • Liên kết tĩnh và liên kết động 2
- Thừa kế đơn • Khái niệm ■ Kế thừa từ các lớp đã có từ trước. => Không phải định nghĩa nhiều. Thiết kế đơn giản hơn. ■ Ích lợi: có thể tận dụng lại • Các thuộc tính chung • Các hàm có thao tác tương tự • Khai báo LỚP CHA (Lớp cơ sở) class : { // khai báo lớp con LỚP CON … (lớp dẫn xuất) }; 3
- Thừa kế đơn • Dạng thừa kế Lớp cơ sở Thừa kế public Thừa kế private Thừa kế protected private _ _ _ public public private protected class A { int x; protected protected private protected // Thừa kế dạng private void Fx(); class B : A public: {……. }; // A là lớp cơ sở riêng của C int y; class C : private A {……… }; // A là lớp cơ sở chung của D void Fy(); class D : public A {……… protected: }; // A: lớp cơ sở được bảo vệ int z; class E : protected A {………. }; 4
- Thừa kế đơn • Quyền truy xuất trong lớp con – Lớp con có tất cả thành phần (thuộc tính + phương thức) của lớp cha. – Không thể truy xuất thành phần private của lớp cha. 5
- Thừa kế đơn class DiemMau : public class Diem { Diem { int x, y; int mau; public: public: void KTao(int h,int void GanDiem(int h,int t) t,int m) { x = h; y = t; } { GanDiem(h,t); void HienDiem() mau=m; } { void Hien() { HienDiem(); cout
- Thừa kế đơn • Hàm xây dựng và hàm hủy - Khi khởi tạo đối tượng: hàm xây dựng của lớp cha sẽ được gọi trước, sau đó là hàm xây dựng của lớp con. Trong hàm xây dựng của lớp con phải gọi hàm xây dựng của lớp cha để khởi tạo thuộc tính của lớp cha - Khi hủy bỏ đối tượng: hàm hủy của lớp con sẽ được gọi trước, sau đó mới là hàm hủy của lớp cha. A B C Khởi tạo Hủy bỏ 7
- Thừa kế đơn • Hàm xây dựng và hàm hủy class Diem { class DiemMau:public Diem { int x, y; int mau; public: public: Diem() DiemMau() { x=y=0;} :Diem() { mau=0; } Diem(int h, int t) DiemMau(int h,int t,int m) { x=h; y=t;} :Diem(h,t) { mau=m; } Diem(const Diem& d) DiemMau(const DiemMau& d1) { x=d.x; y=d.y;} :Diem(d1){ mau=d1.mau; } ... ... }; }; void main() { x 2 DiemMau a(2,5,3); Diem(2,5) DiemMau b; y 5 DiemMau c = a; mau 3 mau=3; } 8 a
- class SinhVienNuocNgoai : public SinhVien { Thừa kế đơn char* nuoc; char sopassport[12]; • Hàm xây dựng và hàm hủy public: class SinhVien { SinhVienNuocNgoai() char mssv[9]; : SinhVien() { char* hoten; nuoc = new char[30]; int namsinh; strcpy(sopassport,””); float diemtb; } public: SinhVienNuocNgoai(const SinhVien() ; SinhVienNuocNgoai& s) SinhVien(char*,char*,int,float); : SinhVien(s) { SinhVien(const SinhVien&); nuoc = strdup(s.nuoc); void operator=(const SinhVien&); strcpy( sopassport , ~SinhVien() { delete[] hoten; } s.sopassport); void Nhap(); } void In(); ~SinhVienNuocNgoai() { ... delete[] nuoc; }; } //Định nghĩa các hàm thành viên ... … }; 9
- Thừa kế đơn • Tái định nghĩa dữ liệu thành viên – Thuộc tính của lớp con trùng tên thuộc tính của lớp cha. – Trong lớp con, nếu ta truy xuất đến dữ liệu trùng tên đó thì sẽ truy xuất đến dữ liệu của lớp con. – Truy xuất dữ liệu lớp cha : :: class LopCha { LopCon::LopCon():LopCha() public: { a = 1; } int a; void LopCon::Hien() LopCha() { a= 0; } { cout
- Thừa kế đơn • Tái định nghĩa hàm thành viên – Hàm thành viên của lớp con trùng tên với hàm thành viên của lớp cha. – Gọi hàm trùng tên => gọi hàm của lớp con. – Gọi hàm của lớp cha : ::(…) 11
- Thừa kế đơn class Diem { void DiemMau :: Hien() int x, y; { public: Diem::Hien(); ... cout
- Thừa kế bội • Ưu điểm – Tận dụng được những thành phần đã có sẵn của lớp cha: • Dữ liệu thành viên • Hàm thành viên – Thuận lợi khi sử dụng kết hợp với hàm ảo. SinhViên NhânViên Dữ liệu của SinhViên – mã số – mã số Dữ liệu của NhânViên SinhViênTạiChứ Dữ liệu của SinhViênTạiChức c Tạo ra đối tượng 13
- Thừa kế bội • Vấn đề cần lưu ý khi sử dụng thừa kế bội ■ Cạnh tranh trong thừa kế bội. ■ Thiết kế sơ đồ thừa kế phải đúng ý nghĩa. ■ Nên hạn chế và cẩn thận khi sử dụng thừa kế bội. 14
- class XeDien { Thừa kế bội int loaibinhdien; int thoigian; class XeDap { float tocdo; char loai[10]; char* mau; public: int chieucao; XeDien() { … } public: XeDien(int b, XeDap() { … } int tg, float td) XeDap(char* l,char* m,int c){…} { … } }; }; class XeDapDien:public XeDap, public XeDien{ public: Khai báo lớp trong XeDapDien(); thừa kế bội XeDapDien( char*, char*, int , int , int , float ); }; XeDapDien::XeDapDien ():XeDap(), XeDien(){ … } XeDapDien::XeDapDien ( char* a, char* b, int c, int d, int e, float f ) Gọi hàm xây dựng : XeDap(a, b, c), XeDien(d,e,f) { … } của các lớp cha 15 …
- Liên kết tĩnh và liên kết động • Sự tương thích giữa đối tượng của lớp con và đối tượng của lớp cha void main() { Có thể gán Cha = Con LỚPCHA LopCha a; LopCon b; a = b; LỚPCON b = a; // Sai Hổn LopCha *pa; class LopCha { pa = &a; Con trỏ của lớp cha có … … LopCon *pb; thể trỏ đến }; pb = &b; đối tượng class LopCon của lớp con : public pa = &b; LopCha { pb = &a; // … … Sai }; } 16
- Liên kết tĩnh và liên kết động • Liên kết tĩnh – Con trỏ thuộc lớp nào, khi gọi hàm sẽ gọi hàm của lớp đó. – Tính chất của đối tượng được nhận biết khi biên dịch CT. class LopCha { void main() { … LopCha a; public: LopCha *pa=&a; … //Lớp cha void HamThanhVien() { pa->HamThanhVien(); cout
- Liên kết tĩnh và liên kết động • Hàm ảo – Cú pháp: khai báo thêm từ khóa virtual trước hàm. – Dùng chung với tính liên kết động => tính đa hình class LopCha class LopCon : public LopCha { { ... ... public: public: virtual void HamAo() void HamAo() { … } { … } }; }; 18
- Liên kết tĩnh và liên kết động • Hàm hoàn toàn ảo ■ Cú pháp: chỉ khai báo tên trong lớp cha và gán=0. ■ Hàm hoàn toàn ảo phải định nghĩa lại trong lớp con. class LopCha class LopCon:public LopCha { { ... ... public: public: virtual void HamHT_Ao()=0; void HamHT_Ao() { … } }; }; 19
- Liên kết tĩnh và liên kết động • Liên kết động – Con trỏ đang trỏ đến đối tượng nào, khi gọi hàm ảo sẽ gọi hàm của lớp tạo ra đối tượng đó. – Tính chất của đối tượng được nhận biết khi đang thực thi. class LopCha { void main() { public: LopCha a; virtual void HamAo() { LopCha *pa=&a; coutHamAo(); //Lớp con void HamAo() { pa= &b; cout
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - TS. Trần Công Án
57 p | 89 | 13
-
Bài giảng Lập trình hướng đối tượng: Chương 2 - Nguyễn Sơn Hoàng Quốc, ThS. Nguyễn Tấn Trần Minh Khang
14 p | 174 | 12
-
Bài giảng Lập trình hướng đối tượng - Chương 1: Phương pháp lập trình hướng đối tượng
9 p | 140 | 9
-
Bài giảng Lập trình hướng đối tượng C++ - Chương 2: Lập trình hướng đối tượng
53 p | 46 | 8
-
Bài giảng Lập trình hướng đối tượng (dùng Java): Chương 1 - Trần Minh Thái (2017)
55 p | 80 | 8
-
Bài giảng Lập trình hướng đối tượng - Bài 1: Tổng quan lập trình hướng đối tượng
53 p | 120 | 8
-
Bài giảng Lập trình hướng đối tượng (Dùng C#): Chương 2 - Trần Minh Thái
35 p | 103 | 8
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Thị Anh Thi
7 p | 197 | 7
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - ThS. Trịnh Thành Trung
53 p | 87 | 7
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Minh Thái
40 p | 116 | 6
-
Bài giảng Lập trình hướng đối tượng 1: Chương 1 - ThS. Thái Kim Phụng
39 p | 100 | 6
-
Bài giảng Lập trình hướng đối tượng – Bài 01: Tổng quan về OOP
47 p | 63 | 5
-
Bài giảng Lập trình hướng đối tượng (dùng JAVA): Chương 1 - Trần Minh Thái
40 p | 99 | 5
-
Bài giảng Lập trình hướng đối tượng và C++: Chương 1
15 p | 104 | 4
-
Bài giảng Lập trình hướng đối tượng: Nhập môn - Trần Phước Tuấn
15 p | 139 | 4
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Tổng quan về lập trình hướng đối tượng
47 p | 11 | 4
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Các khái niệm cơ bản trong lập trình hướng đối tượng
36 p | 15 | 3
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Nguyễn Khanh Văn
0 p | 83 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn