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

Phần 2: Ngôn ngữ lập trình C++ - Chương 4: Kế thừa ppt

25 945 5

Đ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 25
Dung lượng 651 KB

Nội dung

Phần 2: Ngơn ngữ lập trình C++ Chương 4: Kế thừa Các nội dung  Các khái niệm  Phân loại kế thừa  Kế thừa đơn  Tính đa hình  Lớp trừu tượng  Kế thừa bội Các khái niệm  Kế thừa (inheritance): Lớp B kế thừa lớp A, tức B tái sử dụng thành phần liệu thao tác A A Lớp cha (lớp sở) B Lớp (lớp dẫn xuất) Ví dụ kế thừa Lớp Số Giá trị +, -, *, / ,==,… Lớp Số Nguyên Lớp Số Thực Giá trị nguyên Giá trị thực +, -, *, / ,==,… +, -, *, / ,==,… Lớp Phân Số Lớp Số Phức Giá trị mẫu số Giá trị phức +, -, *, / ,==,… +, -, *, / ,==,… Phân loại kế thừa  Có hai cách phân loại  Theo mức độ kế thừa: có mức  Public: bảo toàn mức độ che dấu thành phần lớp sở lớp dẫn xuất  Private: đưa mức che dấu thành phần lớp sở lên mức private lớp dẫn xuất  Theo số lượng lớp sở: có loại  Kế thừa đơn  Kế thừa bội Cú pháp khai báo kế thừa  Kế thừa đơn  Trong E là:  public  private  Kế thừa bội class B: < A { E> //Đ/n phần thân lớp dẫn xuất }; class C: < A>A, < B>B { E E //Đ/n phần thân lớp dẫn xuất }; Kế thừa đơn  Chương trình 4.1: xây dựng hai lớp số Real Complex, lớp Complex kế thừa lớp Real class Real { class Real { protected: float r; public: Real(float a= 0){ r =a; } //tiếp hình bên }; //tiếp từ hình bên Real Add(Real x){ Real z; z.r =x.r + r; return z; } void Print(){ cout< r; < } }; Chương trình 4.1 (tiếp) class Complex: public Real { float i; //Phan ao public: Complex(float rp= float 0, ip= 0):Real(rp){ i= ip; } //tiếp hình bên }; class Complex: public Real { //tiếp từ hình bên Complex Add(Complex x) { Complex a; a.r =x.r + r; a.i =x.i + i; return a; } void Print(){ Real::Print(); cout< "+ < < j"< i; } }; Chương trình 4.1 (tiếp hết) main(){ Real x, y(10.5),z(25.5); x =y.Add(z); cout< "x= x.Print(); < "; cout< endl; < Complex c, d(5,6), e(6,9); c =d.Add(e); cout< "c= c.Print(); < "; cout< endl; < return system("PAUSE"),EXIT_SUCCESS; } Kết chạy Tính đa hình hàm ảo  Khái niệm đa hình:  Ta thấy chương trình trên, hàm main có đối tượng lớp Real Complex Các đối tượng có hàm thành viên Print() khơng có tham số để in nội dung đối tượng Do đó, hàm main gửi thơng báo Print cho đối tượng, yêu cầu hiển thị nội dung chúng đối tượng gọi hàm Print để in nội dung chúng hình Do đối tượng có nội dung khác nên nội dung in khác Đây gọi đa hình, hàm thành viên giống cho nhiều lớp khác gọi hàm đa hình Tính đa hình :a Real Print Print() main() Print :a Complex Print() Vấn đề với tính đa hình main(){ Real x(10.5); cout< "x= x.Print(); cout< endl; < "; < Complex c(6,9); cout< "c= c.Print(); cout< endl; < "; < Real *pr =&x; cout< "x= < ";pr-> Print();cout< endl; < pr= &c; cout< "c= < ";pr-> Print();cout< endl; //Vấn đề < return system("PAUSE"),EXIT_SUCCESS; } Kết chạy Vấn đề với tính đa hình  Vấn đề nằm dòng in c =6, tức in phần thực c, trỏ pr trỏ vào c  Nguyên nhân:  Do bên đối tượng thuộc lớp Complex có hàm Print(), kế thừa từ lớp Real, định nghĩa lại lớp Complex, nên gọi pr> Print(), hệ thống liên kết gọi đến hàm Print lớp Real, xét kiểu trỏ pr kiểu Real, không xét đến thân kiểu đối tượng mà pr trỏ đến Đây hình thức liên kết sớm (early binding), thực vào lúc dịch chương trình Giải pháp cho vấn đề đa hình  Sử dụng hàm ảo (virtual)  Thêm từ khóa virtual vào khai báo hàm Print lớp Real  Khi hàm Print lớp Complex hàm virtual, ta khơng cần lặp lại từ khóa đ/n hàm class Real { //tiếp từ hình bên Real Add(Real x){ Real z; z.r =x.r + r; return z; } virtual void Print(){ cout< r; < } }; Kết chạy lại Hàm ảo chế liên kết muộn  Cơ chế liên kết muộn (late binding)  Khi gặp hàm ảo, hệ thống khơng thực liên kết sớm dịch chương trình, mà chờ đến chạy chương trình, sau xác định rõ kiểu đối tượng mà thi hành hàm đó, việc liên kết thực hiện, nhằm tìm loại hàm cần thiết để thực Lớp trừu tượng hàm ảo túy  Hàm ảo túy (pure virtual function):  Là hàm ảo khơng có phần định nghĩa (khơng có phần thân hàm)  Lớp trừu tượng (abstract class):  Là lớp có m hàm thành viên ảo ột túy Ví dụ Abs class Number virtual Print()= class Integer Print() class Real Print() //Đ/n lớp trừu tượng class Number { //Khai báo hàm ảo túy public: virtual void Print()= 0; }; class Integer: public Number { public: void Print(); }; class Real: public Number { public: void Print(); }; Lớp trừu tượng  Một số quy tắc:  Lớp trừu tượng khơng có đối tượng, dùng để khái qt thành phần chung lớp  Có thể khai báo trỏ kiểu lớp trừu tượng  Một hàm ảo túy lớp trừu tượng cần phải định nghĩa lại lớp dẫn xuất; tiếp tục hàm ảo lớp đó, lớp dẫn xuất lại trừu tượng Kế thừa bội  Bài tập nhà nghiên cứu Tóm tắt  Khái niệm kế thừa  Cách phân loại kế thừa  Tính đa hình cách cài đặt  Sự khác hàm ảo hàm thông thường  Lớp trừu tượng hàm ảo túy  Kế thừa bội Bài tập  Bài 1: Xây dựng lớp số: gồm lớp Number, Integer, Fraction, Real, Complex có nút gốc lớp Number Mỗi lớp gồm thao tác:  Số học: + ,-,*,/  So sánh: < ,= ,> =  Phép xuất hình < <  Bài 2: Xây dựng lớp hình: gồm lớp Shape, Rectangle, Square, Triangle, Quadrangle Mỗi lớp gồm thao tác:  Thank you! ... khái niệm  Phân loại kế thừa  Kế thừa đơn  Tính đa hình  Lớp trừu tượng  Kế thừa bội Các khái niệm  Kế thừa (inheritance): Lớp B kế thừa lớp A, tức B tái sử dụng thành phần liệu thao tác A... thành phần lớp sở lên mức private lớp dẫn xuất  Theo số lượng lớp sở: có loại  Kế thừa đơn  Kế thừa bội Cú pháp khai báo kế thừa  Kế thừa đơn  Trong E là:  public  private  Kế thừa bội... A { E> //Đ/n phần thân lớp dẫn xuất }; class C: < A>A, < B>B { E E //Đ/n phần thân lớp dẫn xuất }; Kế thừa đơn  Chương trình 4.1: xây dựng hai lớp số Real Complex, lớp Complex kế thừa lớp Real

Ngày đăng: 06/08/2014, 00:21

TỪ KHÓA LIÊN QUAN

w