Chapter5 dẫn xuất, thừa kế và đa hình, đa xạ c++

40 679 13
Chapter5 dẫn xuất, thừa kế và đa hình, đa xạ c++

Đ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

dẫn xuất, thừa kế và đa hình, đa xạ c++

Lập trình Chương 5: Dẫn xuất/thừa kế và ₫a hình/₫axạ và ₫a hình/₫a xạ 8/6/2012 Nội dung  5.1 Dẫn xuất/thừa kế  5.2 Hàm ảo cơ chế ₫a hình/₫a xạ  5.3 Lớp thuần ảo  5.4 Kiểm soát truy nhập  5.5 Tương thích kiểu Chương 5: Dẫn xuất/thừa kế đa hình/đa xạ 2 5.1 Dẫn xuất kế thừa  Nghiên cứu các thuộc tính phương thức của các loại xe ₫ạp sau  X e ₫ạp (Bicycle)  Tandem bicycle Chương 5: Dẫn xuất/thừa kế đa hình/đa xạ 3  Racing Bike  Mountain Bike Chương 5: Dẫn xuất/thừa kế đa hình/đa xạ 4 5.1 Dẫn xuất kế thừa (…)  Tandem bicycle là một loại xe ₫ạp —Xe ₫ạp có hai yên  Mountain bicycle là một loại xe ₫ạp —Xe ₫ạp có khả năng chống sốc (lốp dầy nhiều bắnh răng)  Racing bicyle là mộtloạixe₫ạp  Racing bicyle là một loại xe ₫ạp —Xe ₫ạp có cấu tạo khí ₫ộng lực học nhẹ  Tandem , mountain , racin g bic y cle là nhữn g lo ạ i xe ,,gy g ạ ₫ạp chuyên dụn g — Có các thành phần cơ bản của một chiếc xe ₫ạp Cùng nguyên lý hoạt ₫ộng — Cùng nguyên lý hoạt ₫ộng —Bổ sung thêm các thông tin khác Chương 5: Dẫn xuất/thừa kế đa hình/đa xạ 5 5.1 Dẫn xuất kế thừa (…)  Cơ chế dẫn xuất/thừa kế là một kỹ thuật lập trình hướng ₫ối tượng cho phép chuyên biệt hóa  Dẫnxuấtchophéptạoramộtlớpmới(lớpdẫnxuất) củacác₫ối  Dẫn xuất cho phép tạo ra một lớp mới (lớp dẫn xuất) của các ₫ối tượng bằng cách sử dụng các lớp cũ như là các lớp cơ sở —Lớp dẫn xuất thừa hưởng các thuộc tính hành vi của lớp “cha- mẹ ” (lớpcơ sở) mẹ (lớp cơ sở) —Lớp dẫn xuất là một phiên bản chuyên biệt hóa của lớp “cha-mẹ” Lớ p cơ sở -” lớ p cha mẹ” Bicycle p p Mountain Bikes Racing Bikes Tandem Bikes Chương 5: Dẫn xuất/thừa kế đa hình/đa xạ 6 Lớp dẫn xuất Ví dụ minh họa sử dụng cơ chế dẫn xuất  Xây dựng các lớp biểu diễn về con người, sinh viên, giảng viên Person Tên lớ p  Các thuộc tính phép toán cơ bản của lớp Person Person name: string age: int g ender: strin g Thuộc tính p g g set_name get_name set_age get age Phép toán/ h thứ get _ age set_gender get_gender display p h ương thứ c Chương 5: Dẫn xuất/thừa kế đa hình/đa xạ 7  Các thuộc tính phép toán cơ bản của lớp Student Student L ectu r e Lecture Student name: string age: int gender: string ectu e name: string age: int gender: string fltt class: strin g id: int set_name g et name f acu lt y: s t rin g telnumber: int set_name get_name g _ set_age get_age set_gender g et _g ender set_age get_age set_gender get_gender g_g set_class get_class set_id g et _ id set_faculty get_faculty set_telnumber get_telnumber Chương 5: Dẫn xuất/thừa kế đa hình/đa xạ 8 g_ display display 5.1 Dẫn xuất kế thừa (…)  Ba lớp trên giống nhau về: —Thuộc tính: N  N ame  Age  gender — Phương thức  set_name, get_name  set_age, get_age  set_gender, get_gender  Khác nhau: lớp Student, Lecture có bổ sung thêm các thuộctínhvàphương thức thuộc tính và phương thức Chương 5: Dẫn xuất/thừa kế đa hình/đa xạ 9  Quan hệ lớp Person name: string age: int Lớp cơ sở age: int gender: string set_name get_name set_age get_age set_gender get_gender dl d isp l ay Lớp dẫn xuất Quan hệ dẫn xuất Student class: string ID: int Lecture Faculty: string T e ln u m be r : in t ID: int set_class get_class set_ID tID eube: t set_faculty get_faculty set_telnumber lb Chương 5: Dẫn xuất/thừa kế đa hình/đa xạ 10 ge t _ ID display get_te l num b er display [...]... 5: Dẫn xuất /thừa kế đa hình /đa xạ 25 5.2 Hàm ảo cơ chế ₫a hình/₫a xạ( ) Kết quả chạy chương trình Tại sao lại vậy? Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 26 5.2 Hàm ảo cơ chế ₫a hình/₫a xạ( ) Nguyên nhân: Trong quá trình liên kết, lời gọi các hàm hàm thành viên thông thường ₫ược chuyển thành á lệnh hả thà h các lệ h nhảy tới ₫ị chỉ cụ thể của mã th ₫ịa hỉ ủ ã thực hiện hàm => "liên kết... chạy chương trình q ạy g Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 18 Các dạng dẫn xuất /thừa kế Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 19 Tóm lược Lớp dẫn xuất có hai mục ₫ích cơ bản — Mở rộng các tính năng của lớp cơ sở — Thừa hưởng các thuộc tính phép toán của lớp cơ sở — Cụ thể hóa các phép toán qua những phương thức khác nhau Ưu ₫iểm của cơ chế thừa hưởng — Xây dựng một mô hình phần mềm... bản sao cho B Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 22 Hàm hủy Nếu không ₫ịnh nghĩa hàm hủy cho lớp dẫn xuất B thì compiler sẽ tự sinh ra gọi hàm hủy của A Quá trình hủy ngược lại với quá trình tạo, phần tạo trước của lớp cơ sở sẽ ₫ược hủy sau Sự cần thiết ₫ịnh nghĩa lại hàm hủy ở lớp dẫn xuất cũng giống như một lớp bình thường Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 23 Hàm toán tử gán Nếu... Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 28 Kết quả chạy chương trình Như mong ₫ợi chưa? Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 29 5.3 Hàm thuần ảo, lớp thuần ảo Hàm thuần ảo (hàm trừu tượng) là hàm ảo có khai báo mà không có ₫ịnh nghĩa Lớp thuần ảo (lớp trừu tượng) là lớp có ít nhất một hàm thuần ảo Lớp thuần ảo chỉ là giao diện, không sử dụng ₫ược diện Bắt buộc phải ₫ịnh nghĩa lớp dẫn xuất... f(){ b = 0;} void h(){} }; void main(){ B b; //OK b.f(); //OK } Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 31 Hàm hủy là hàm ảo Hàm hủy lớp cơ sở là ảo thì có thể dùng con trỏ lớp cơ sở ₫ể hủy ₫ối tượng lớp dẫn xuất Nếu hàm hủy lớp cơ sở là ảo thì hàm hủy lớp dẫn xuất cũng tự ₫ộng là ảo Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 32 class A{ int n; int *data; public: A(int _n):n(_n){ data = new int[n];}... endl; } Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 12 Thực hiện (Lớp Student) //Khai báo lớp Student trong file student.h class Student: public Person { string lop; int id; public: Student(string, int, string, Student(string int string string,int); void set_class(string c); string get_class(); void set_id(int i); int get_id(); void display(); }; Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 13 Thực hiện... ~A() Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 33 class A{ int n; int *data; public: A(int _n):n(_n){ data = new int[n];} virtual ~A(){ delete [] data;} }; class B: public A{ int m; int* data; public: B(int _n,int _m):A(_n),m(_m){data = new int[m];} ~B(){ delete [] data; } }; void main(){ A *pb = new B(5,5); Gọi ~B(); sau đó gọi delete pb; ~A() } Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 34 5.3 Kiểm... 5: Dẫn xuất /thừa kế đa hình /đa xạ 14 Thực hiện (Lớp Lecture) // Khai báo lớp Lecture trong file lecture.h class L t l Lecture:public P bli Person{ { string faculty; int telnumber; p public: Lecture(string,int, string, string,int); void set_faculty(string f); string get_faculty(); void set telnumber(int tel); set_telnumber(int int get_telnumber(); void display(); }; Chương 5: Dẫn xuất /thừa kế đa. .. chương trình chạy, kể cả trong ể trường hợp ta gọi hàm ₫ó qua một con trỏ vào một lớp cơ sở (lớp cơ sở ₫ã khai báo hàm ảo ₫ó) ( p ) Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 27 5.2 Hàm ảo cơ chế ₫a hình/₫a xạ( ) Sửa lại chương trình như sau: — Chỉ cần khai báo hàm display của lớp person là hàm ảo bằng cách thê chữ virtual vào t ớ hà display t á h thêm hữ i t l à trước hàm di l trong phần hầ khai... operator=(const B& b) { A::operator=(b); //hàm toán tử gán của lớp cơ sở m = b.m; //biến B ₫ịnh nghĩa thêm return (*this); ( ); } Chương 5: Dẫn xuất /thừa kế đa hình /đa xạ 24 5.2 Hàm ảo cơ chế ₫a hình/₫a xạ Nghiên cứu chương trình minh họa sử dụng các lớp Person, Student Lecture ở trên //Thực hiện trong file main.cpp void main(){ Person * P *per = new P Person ("J h " 21 " ("John",21,"man"); ") Person . Engineering",123456789); per.display(); stu.display(); lec.display(); }  Kết q uả ch ạy chươn g trình q ạy g Chương 5: Dẫn xuất /thừa kế và đa hình /đa xạ 18 Các dạng dẫn xuất /thừa kế Chương 5: Dẫn xuất /thừa kế và đa hình /đa xạ 19 Tóm lược  Lớp dẫn xuất. Tandem bicycle Chương 5: Dẫn xuất /thừa kế và đa hình /đa xạ 3  Racing Bike  Mountain Bike Chương 5: Dẫn xuất /thừa kế và đa hình /đa xạ 4 5.1 Dẫn xuất và kế thừa (…)  Tandem bicycle là một loại xe. khác Chương 5: Dẫn xuất /thừa kế và đa hình /đa xạ 5 5.1 Dẫn xuất và kế thừa (…)  Cơ chế dẫn xuất /thừa kế là một kỹ thuật lập trình hướng ₫ối tượng cho phép chuyên biệt hóa  Dẫnxuấtchophéptạoramộtlớpmới(lớpdẫnxuất)

Ngày đăng: 27/03/2014, 12:11

Từ khóa liên quan

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

Tài liệu liên quan