Bài giảng Lập trình hướng đối tượng - Chương 3: Kế thừa - Phạm Minh Hoàn
Hàm hủy của lớp cơ sở cũng không được kế thừa.
Hàm hủy được thi hành theo thứ tự ngược lại với hàm tạo. Nghĩa là, hàm hủy của lớp dẫn xuất thi hành trước hàm hủy của lớp cơ sở.
52 trang |
Chia sẻ: huongthu9 | Lượt xem: 510 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình hướng đối tượng - Chương 3: Kế thừa - Phạm Minh Hoàn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Phạm Minh Hoàn - NEUCHƯƠNG 3: KẾ THỪAPhạm Minh HoànBộ môn công nghệ thông tin – Đại học Kinh tế Quốc dânEmail: hoanpm@neu.edu.vn Phạm Minh Hoàn - NEUNỘI DUNG CHƯƠNG TRÌNHChương này trình bày những vấn đề sau đây:Tính kế thừa và dẫn xuất.Phân loại kế thừa.Hàm tạo và hàm hủy đối với sự kế thừa.Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAKHÁI NIỆMKế thừa là một trong các khái niệm cơ sở của phương pháp lập trình hướng đối tượng. Tính kế thừa cho phép định nghĩa các lớp mới từ các lớp đã có. Lớp đã có được gọi là lớp cơ sở, lớp mới được gọi là lớp dẫn xuất. Một lớp có thể là lớp cơ sở cho nhiều lớp dẫn xuất khác nhau. Lớp dẫn xuất sẽ kế thừa một số thành phần (dữ liệu và hàm) của lớp cơ sở, đồng thời có thêm những thành phần mới.Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAPHÂN LOẠIĐơn kế thừaĐa kế thừa ABCDABCDABCABPhạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAĐỊNH NGHĨA KẾ THỪAGiả sử đã định nghĩa các lớp A, B, .... Cú pháp để xây dựng lớp Z dẫn xuất từ các lớp A, lớp B, ... như sau: class Z: mode A [, mode B[...]]{private: // Khai báo các thuộc tính của lớp Zpublic: // Định nghĩa các hàm thành phần của lớp Z };Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAĐỊNH NGHĨA KẾ THỪATrong đó mode có thể là private hoặc public với ý nghĩa như sau:Kế thừa theo kiểu public thì tất cả các thành phần public của lớp cơ sở cũng là thành phần public của lớp dẫn xuất.Kế thừa theo kiểu private thì tất cả các thành phần public của lớp cơ sở sẽ trở thành các thành phần private của lớp dẫn xuất.Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAĐỊNH NGHĨA KẾ THỪAChú ý:Trong cả hai trường hợp ở trên thì thành phần private của lớp cơ sở là không được kế thừa. Lớp dẫn xuất không cho phép truy nhập đến các thành phần private của lớp cơ sở.Lớp dẫn xuất không cho phép kế thừa các hàm tạo, hàm hủy và toán tử gán của lớp cơ sở. Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪATRUY NHẬP ĐẾN CÁC THÀNH PHẦNThành phần của lớp dẫn xuất bao gồm: Các thành phần khai báo trong lớp dẫn xuất.Các thành phần mà lớp dẫn xuất thừa kế từ các lớp cơ sở.Quy tắc sử dụng các thành phần trong lớp dẫn xuất: Tên_đối_tượng.Tên_lớp::Tên_thành_phần Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAVÍ DỤclass A{public: int n;void nhap(){ cout>n;}};Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAVÍ DỤclass B: public A{public: int m;void nhap(){ cout>m;}};Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAVÍ DỤXét khai báo: B ob;Khi đó: ob.m là thuộc tính m khai báo trong Bob.n là thuộc tính n thừa kế từ lớp A ob.B::nhap() là hàm nhap() định nghĩa trong lớp Bob.A::nhap() là hàm nhap() định nghĩa trong lớp Aob. nhap().Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪACHÚ ÝNếu truy xuất đến thành phần của lớp dẫn xuất mà không dùng tên lớp chương trình dịch phải tự phán đoán để biết thành phần đó thuộc lớp nào.Thứ tự truy xuất: lớp dẫn xuất, các lớp có quan hệ gần với lớp dẫn xuất sẽ được xét trước, các lớp quan hệ xa hơn xét sau.Trong trường hợp thành phần đang xét có mặt đồng thời trong 2 lớp cơ sở có cùng một cấp quan hệ với lớp dẫn xuất, chương trình dịch sẽ đưa ra thông báo lỗi. Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAVÍ DỤ 1#include #include #include class A{ int a; protected: int b; public:void set_ab();int get_a(void);void show_a(void);void set_b(){ b = 20;}};Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAVÍ DỤ 1class B: public A {int c;public:void mul(void);void display(void);};Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAVÍ DỤ 1void A::set_ab(void){ a = 5; b = 10;}int A::get_a(){ return a;}Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAVÍ DỤ 1void A::show_a(){ cout #include class Diem{private: double x, y;Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAVÍ DỤ 2public:void nhap(){cout>x;cout>y;}void hienthi(){ cout>r; }double get_r(){ return r; }};Phạm Minh Hoàn - NEUSỰ DẪN XUẤT VÀ TÍNH KẾ THỪAVÍ DỤ 2main(){Hinhtron h;clrscr();cout#include #include class M{protected : int m;public : void setm(int x) {m=x;}};Phạm Minh Hoàn - NEUKHAI BÁO PROTECTEDVÍ DỤ 1class N{ protected : int n;public : void setn(int y) {n=y;}};Phạm Minh Hoàn - NEUKHAI BÁO PROTECTEDVÍ DỤ 1class P : public M,public N{public : void display(void){ cout#include #include using namespace std;class sinhvien{ char hoten[25];protected: int sbd;Phạm Minh Hoàn - NEUKHAI BÁO PROTECTEDVÍ DỤ 2public: void nhap(){ cout>sbd;cin.ignore(1);}void hienthi(){ cout>d1>>d2;}Phạm Minh Hoàn - NEUKHAI BÁO PROTECTEDVÍ DỤ 2void hienthi_diem(){ cout>n; cin.ignore(1);Phạm Minh Hoàn - NEUKHAI BÁO PROTECTEDVÍ DỤ 2for(i=0;i#include #include using namespace std;class Diem{private: double x, y;public:Diem();Diem(double x1, double y1); void in();};Phạm Minh Hoàn - NEUHÀM TẠO ĐỐI VỚI TÍNH KẾ THỪADiem::Diem(){ x=y=0.0; }Diem::Diem(double x1, double y1) { x=x1; y=y1; }void Diem::in(){ cout#include Using namespace std;class CS{ public: CS(){cout<<"\nHam tao lop co so";}~CS() {cout<<"\nHam huy lop co so";}};Phạm Minh Hoàn - NEUHÀM HỦY ĐỐI VỚI TÍNH KẾ THỪAclass DX:public CS{ public: DX() {cout<<"\nHam tao lop dan xuat";}~DX() {cout<<"\nHam huy lop dan xuat";}};Phạm Minh Hoàn - NEUHÀM HỦY ĐỐI VỚI TÍNH KẾ THỪAmain(){DX *ob = new DX;getch();delete ob;getch();}
Các file đính kèm theo tài liệu này:
- bai_giang_lap_trinh_huong_doi_tuong_chuong_3_ke_thua_pham_mi.ppt