LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG - Chương 7 docx

8 241 0
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG - Chương 7 docx

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

Thông tin tài liệu

1 Chương 7: THỪA KẾ Giáo viên: Võ Hồng Bảo Châu Khoa CNTT trường ĐH Lạc Hồng LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG MỤC TIÊUMỤC TIÊU • Sử dụng phương thức tự thực hiện trong các lớp dẫn xuất. • Xây dựng các lớp mới thừa kế từ lớp đã có • Lớp có các thành viên là lớp khác 2 OOP-CHƯƠNG 7-THỪA KẾ NỘI DUNG CHI TIẾTNỘI DUNG CHI TIẾT • KHÁI NIỆM TÍNH THỪA KẾ • LOẠI LỚP THỪA KẾ – THỪA KẾ ĐƠN – THỪA KẾ BỘI • CÁC KIỂU THUỘC TÍNH KẾ THỪA • PHƯƠNG THỨC THIẾT LẬP VÀ HỦY BỎ 3 OOP-CHƯƠNG 7-THỪA KẾ KHÁI NiỆM TÍNH THỪA KẾKHÁI NiỆM TÍNH THỪA KẾ • Tạo ra lớp mới từ lớp đã có • Sử dụng lại những kết quả đã có • Tạo ra lớp thừa kế còn được gọi: – Mở rộng (extend) lớp đã có, – Hoặc đặc tả lại (specification) • Lớp mới được tạo ra từ lớp đã có gọi là lớp thừa kế (inheritance class) hay lớp dẫn xuất (derived class) • Lớp để tạo ra lớp mới gọi là lớp cơ sở (based class) hay lớp cha (super class) 4 OOP-CHƯƠNG 7-THỪA KẾ 2 ID_Num Name YearOfBirth Address getID_Num() setID_Num(newID) class PERSON RollNum Score getScore() setSore(newScore) class STUDENT quan hệ “là 1” Để được cái tương đương ID_Num Name YearOfBirth Address getID_Num() setID_Num(newID) class STUDENT RollNum Score getScore() setSore(newScore) thừa kế tính chất riêng Con = Cha + một tí LỚP CƠ SỞ (LỚP CHA) LỚP DẪN XuẤT (LỚP CON) 5 OOP-CHƯƠNG 7-THỪA KẾ LOẠI LỚP THỪA KẾLOẠI LỚP THỪA KẾ • Thừa kế đơn (single inheritance): Tạo ra lớp dẫn xuất chỉ từ một lớp cơ sở • Thừa kế bội (multiple inheritance): Lớp dẫn xuất được tạo ra từ hơn 1 lớp cơ sở A B A B C A B C C A B 6 OOP-CHƯƠNG 7-THỪA KẾ THỪA KẾ ĐƠNTHỪA KẾ ĐƠN class Lớp cơ sở{ // }; class lớp dẫn xuất:kiểu kế thừa Lớp cơ sở{ // } 7 OOP-CHƯƠNG 7-THỪA KẾ VÍ DỤVÍ DỤ LỚP point Dữ liệu: toại độ (x, y) Hành vi: Xuất tọa độ ra màn hình LỚP coloredpoint Dữ liệu: toại độ (x, y),màu Hành vi: Xuất tọa độ và màu ra màn hình point coloredpoint 8 OOP-CHƯƠNG 7-THỪA KẾ 3 Ví dụVí dụ class coloredpoint:public point{ unsigned int color; public: coloredpoint():point(){color=0;} coloredpoint(float ox,float oy,unsigned int c):point(ox,oy){ color=c; } coloredpoint(coloredpoint &p):point(point &b){ color=b.color; } void display(){ cout<<“ham coloredpoint::display()\n”; point:::display(); //gọi tới hàm cùng tên trong lớp cơ sở cout<<“mau “<<color<<endl; } }; class point{ float x,y; public: point(float ox,float oy){x=ox;y=oy;} point(point &p){x=p.x;y=p.y;} void display(){ cout<<“Goi ham point::display()\n”; cout<<“toa do :”<<x<<“;”<<y<<endl; } }; void main() { coloredpoint m; m.display(); m.point::display(); coloredpoint n(2,3,6); coloredpoint p=n; p. display(); p.point::display(); } Lớp dẫn xuất (lớp con) Kiểu thừa kế Lớp cơ sở (lớp cha) Hành vi của lớp cha Hành vi của lớp con 9 OOP-CHƯƠNG 7-THỪA KẾ LƯU ÝLƯU Ý • Lớp dẫn xuất không thể truy cập đến phương thức thiết lập và phương thức hủy bỏ của lớp cơ sở • Hàm friend (hay lớp friend) của lớp cơ sở không thể là hàm friend (hay lớp friend) của lớp dẫn xuất • Các phép toán mới được cài đặt (như là sự định nghĩa chồng phép toán) có thể được truy cập bình thường trong lớp dẫn xuất. • Với những phép toán trả về kiểu của lớp cơ sở, không sử dụng được trong lớp dẫn xuất. Điều này vẫn đúng cho cả những phương thức trả về dữ liệu thuộc lớp cơ sở. 10 OOP-CHƯƠNG 7-THỪA KẾ Ví dụVí dụ class Double{ double data; public: Double( double = 0.0 ); Double operator+( Double ); }; 11 OOP-CHƯƠNG 7-THỪA KẾ class Sothuc:Double{ public: // }; main(){ Sothuc a, b(10), c; c = a + b; //bị lỗi } 12 OOP-CHƯƠNG 7-THỪA KẾ 4 CÁC KIỂU THUỘC TÍNH KẾ THỪACÁC KIỂU THUỘC TÍNH KẾ THỪA • PRIVATE • PUBLIC Kiểu kế thừa Kiểu truy cập các TP ở lớp cơ sở Public Private Public Public private Private x x protected protected private Kiểu thuộc tính trong lớp dẫn xuất 13 OOP-CHƯƠNG 7-THỪA KẾ PHƯƠNG THỨC THIẾT LẬPPHƯƠNG THỨC THIẾT LẬP • Phương thức thiết lập của lớp cơ sở thực hiện trước phương thức thiết lập của lớp dẫn xuất • Đối với thừa kế bội, phương thức thiết lập của lớp cơ sở xuất hiện trước được thực hiện trước 14 OOP-CHƯƠNG 7-THỪA KẾ PHƯƠNG THỨC HỦY BỎPHƯƠNG THỨC HỦY BỎ • Phương thức hủy bỏ của lớp cơ sở thực hiện sau phương thức hủy bỏ của lớp dẫn xuất. • Đối với thừa kế bội, phương thức hủy bỏ của lớp xuất hiện trước được thực hiện sau. 15 OOP-CHƯƠNG 7-THỪA KẾ Hàm xây dựng và hàm hủyHàm xây dựng và hàm hủy • Trong thừa kế, 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 đó mới là hàm xây dựng của lớp con. • Trong thừa kế, 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. AA BB CC 16 OOP-CHƯƠNG 7-THỪA KẾ 5 Ví dụVí dụ class ONE{ public: ONE(){cout << “First class\n”;} ~ONE(){cout << “Destructor of first class\n”;} }; class TWO_A:ONE{ public: TWO_A(){cout << “Second class A\n”;} ~TWO_A(){cout << “Destructor of second A\n”;} }; class TWO_B:ONE{ public: TWO_B(){cout << “Second class B\n”;} ~TWO_B(){cout << “Destructor of second B\n”;} }; 17 OOP-CHƯƠNG 7-THỪA KẾ class THREE:TWO_A,TWO_B{ THREE(){cout << “Third class\n”;} ~THREE(){cout << “Destructor of third class\n”;} }; main(){ THREE obj; } First class Second class A Second class B Third class Destructor of third class Destructor of second B class Destructor of second A class Destructor of first class 18 OOP-CHƯƠNG 7-THỪA KẾ Trường hợp chỉ định constructorTrường hợp chỉ định constructor • Trong một lớp có thể có nhiều phương thức thiết lập. • Có thể chỉ định phương thức thiết lập của lớp cơ sở bằng cách dùng phép toán : ngay sau phương thức thiết lập của lớp dẫn xuất. • Hoặc muốn chỉ định một tham số thực cho phương thức thiết lập của lớp cơ sở 19 OOP-CHƯƠNG 7-THỪA KẾ Ví dụ, có lớpVí dụ, có lớp class Date { int d, m, y; public: Date(int=1,int=1,int=2008); Date(const string); }; Date newYear(7,2,2008); Date christmas(“25 December“); 20 OOP-CHƯƠNG 7-THỪA KẾ 6 Xây dựng lớp dẫn xuấtXây dựng lớp dẫn xuất class Person:Date{ char* name; int bd,bm,by; public: Person(char*,int,int,int); // }; 21 OOP-CHƯƠNG 7-THỪA KẾ Phương thức thiết lậpPhương thức thiết lập Person(char *n,int bd,int bm, int by):Date( bd,bm,by ){ strcpy(name,n); d = bd; m = bm; y = by; } Chỉ sử dụng phương thức này 22 OOP-CHƯƠNG 7-THỪA KẾ Gợi ý về phân tích thừa kếGợi ý về phân tích thừa kế (1) Liệt kê đặc điểm của các đối tượng cần quan tâm. (2) Tìm tập giao của các tính chất giữa các lớp, tách tập giao này để xây dựng lớp cha. (3) Đặt 1 tên gọi có ý nghĩa cho lớp cha. (4) Phần còn lại sau khi tách tập giao là các lớp con. 23 OOP-CHƯƠNG 7-THỪA KẾ Thừa kế - Bài mẫuThừa kế - Bài mẫu Phân tích phân cấp thừa kế cho các lớp: • Hàng điện máy <mã hàng, tên hàng, nhà sản xuất, giá, thời gian bảo hành, điện áp, công suất> • Hàng sành sứ < mã hàng, tên hàng, nhà sản xuất, giá, loại nguyên liệu> • Hàng thực phẩm <mã hàng, tên hàng, nhà sản xuất, giá, ngày sản xuất, ngày hết hạn dùng> 24 OOP-CHƯƠNG 7-THỪA KẾ 7 Bài giảiBài giải • HangĐienMay < maH,tenH,nsx,gia, tgbh,đa,cs > • HangSanhSu < maH,tenH,nsx,gia, lnl > • HangThucPham < maH,tenH,nsx,gia, ngsx,nhhd > HangHoa maH tenH nsx gia HangDienMay tgbh đa cx HangSanhSu lnl HangThucPham ngsx nghhd 25 OOP-CHƯƠNG 7-THỪA KẾ BÀI TẬP TẠI LỚPBÀI TẬP TẠI LỚP Phân tích phân cấp thừa kế cho các đối tượng trong một học viện: • Nhân viên quản lý <mã nv, tên nv, năm sinh, trình độ, trường đào tạo, chuyên môn, lương cb, phụ cấp chức vụ> • Nhân viên nghiên cứu <mã nv, tên nv, năm sinh, trình độ, trường đào tạo, chuyên môn, lương cb, phụ cấp độc hại> • Nhân viên phục vụ <mã nv, tên nv, năm sinh, trình độ, lương cb> 26 OOP-CHƯƠNG 7-THỪA KẾ Yêu cầuYêu cầu • Sử dụng phương thực tự thực hiện trong các lớp dẫn xuất. • Xây dựng các lớp mới thừa kế từ lớp đã có • Lớp có các thành viên là lớp khác 27 OOP-CHƯƠNG 7-THỪA KẾ TÓM TẮTTÓM TẮT • Thừa kế nâng cao khả năng sử dụng lại các đoạn mã chương trình. • Trong thừa kế đơn, một lớp chỉ có thể có một lớp cơ sở (lớp cha). • Trong thừa kế bội, một lớp có thể là lớp dẫn xuất (lớp con) của nhiều lớp. • Lớp con không thể truy xuất đến các thành phần private của lớp cha nhưng có thể truy cập đến thành phần protected và public của lớp cha. • Có 2 hình thức kế thừa: private và public. 28 OOP-CHƯƠNG 7-THỪA KẾ 8 THANK YOU 29 OOP-CHƯƠNG 7-THỪA KẾ . cơ sở A B A B C A B C C A B 6 OOP-CHƯƠNG 7- THỪA KẾ THỪA KẾ ĐƠNTHỪA KẾ ĐƠN class Lớp cơ sở{ // }; class lớp dẫn xuất:kiểu kế thừa Lớp cơ sở{ // } 7 OOP-CHƯƠNG 7- THỪA KẾ VÍ DỤVÍ DỤ LỚP point Dữ. lớp dẫn xuất 13 OOP-CHƯƠNG 7- THỪA KẾ PHƯƠNG THỨC THIẾT LẬPPHƯƠNG THỨC THIẾT LẬP • Phương thức thiết lập của lớp cơ sở thực hiện trước phương thức thiết lập của lớp dẫn xuất • Đối với thừa kế bội,. liệu thuộc lớp cơ sở. 10 OOP-CHƯƠNG 7- THỪA KẾ Ví dụVí dụ class Double{ double data; public: Double( double = 0.0 ); Double operator+( Double ); }; 11 OOP-CHƯƠNG 7- THỪA KẾ class Sothuc:Double{ public: // }; main(){ Sothuc

Ngày đăng: 11/07/2014, 20:20

Từ khóa liên quan

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

Tài liệu liên quan