Lập trình hướng đối tượng Phần 8

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ở

pdf7 trang | Chia sẻ: thienmai908 | Lượt xem: 1028 | Lượt tải: 0download
Nội dung tài liệu Lập trình hướng đối tượng Phần 8, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
11 Object – Oriented Programming PGS. TS. Trần Văn Lăng KHOA CÔNG NGHỆ THÔNG TIN TRƯỜNG ĐẠI HỌC LẠC HỒNG lang@lhu.edu.vn 2 Chương 8 Tính thừa kế 3 Khái niệm về sự 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) 4 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) 25 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ở 6 Cách xây dựng lớp thừa kế dùng C++ class BasedClass{ //... }; class DerivedClass:BasedClass{ //... } 7 Ví dụ class Stack{ int top; char *data; int empty(); int full(); public: Stack(); ~Stack(); int push( char ); int pop( char& ) }; 8 class Hexa:Stack{ public: void tohexa( int ); }; void Hexa::tohexa( int N ){ //... } Hoặc có thể tạo ra phương thức thiết lập Hexa() thay cho tohexa() 39 class Hexa:Stack{ public: Hexa( int ); }; Hexa::Hexa( int N ){ //... } 10 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 11 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ở. 12 Ví dụ class Double{ double data; public: Double( double = 0.0 ); Double operator+( Double ); }; 413 class Sothuc:Double{ public: // }; main(){ Sothuc a, b(10), c; c = a + b; //bị lỗi } 14 Thừa kế bội class Derived:Based1, Based2{ //... }; Cần lưu ý về sự giống nhau của các thành phần trong 2 lớp cơ sở để tránh sự mơ hồ khi sử dụng. Trường hợp này phải thêm tên lớp phía trước tên thành phần 15 Thừa kế ảo () class A class B class C class D 16 class A{ //... }; class B: A{}; class C: A{}; class D: B, C{ //... }; 517 Để tránh tình trạng một thành phần trong lớp A xuất hiện 2 lần trong lớp D, sử dụng thừa kế ảo class B: virtual A{}; class C: virtual A{}; class D: B, C{ //... }; 18 Hình thức thừa kế Có hai hình thức  private (hình thức chuẩn)  public: nhằm bảo toàn lại thuộc tính của thành phần 19 Bảng tác động bởi hình thức thừa kế Không thể truy cập public protected private public protected public Không thể truy cập private private private public protected private Derived classBased class 20 Thứ tự thực hiện trong hệ thống 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 sự 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. 621 Phương thức huỷ bỏ  Của lớp cơ sở thực hiện sau phương thức huỷ bỏ của lớp dẫn xuất.  Đối với thừa kế bội, phương thức huỷ bỏ của lớp xuất hiện trước được thực hiện sau. 22 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”;} }; 23 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 24 Trườ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ở 725 Ví 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“); 26 Xây dựng lớp dẫn xuất class Person:Date{ char* name; int bd,bm,by; public: Person(char*,int,int,int); //... }; 27 Phươ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 28 Yê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

Các file đính kèm theo tài liệu này:

  • pdfjyksagupierh'iufgoasidu[ps (8).pdf
Tài liệu liên quan