Chương 4_Kế thừa C++ viện Điện Tử Truyền Thông Đại Học BK HN
Chương 4: Kế thừa Phần 2: Ngôn ngữ lập trình C++ Các nội dung chính Các khái niệm cơ bản 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 cơ bản Kế thừa (inheritance): Lớp B kế thừa lớp A, tức là B sẽ có thể tái sử dụng các thành phần dữ liệu và các thao tác trong A A B Lớp cha (lớp cơ sở) Lớp con (lớp dẫn xuất) Ví dụ về sự kế thừa Lớp Số +, -, *, / <,>,==,… Giá trị Lớp Số Thực +, -, *, / <,>,==,… Giá trị thực Lớp Số Nguyên +, -, *, / <,>,==,… Giá trị nguyên Lớp Phân Số +, -, *, / <,>,==,… Giá trị mẫu số Lớp Số Phức +, -, *, / <,>,==,… 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ó 2 mức Public: bảo toàn mức độ che dấu của các thành phần của lớp cơ sở trong lớp dẫn xuất Private: đưa các mức che dấu của các thành phần trong lớp cơ sở lên mức private trong lớp dẫn xuất Theo số lượng lớp cơ sở: có 2 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 có thể là: public private Kế thừa bội class B: <E> A { //Đ/n phần thân của lớp dẫn xuất }; class C: <E A > A, <E B > B { //Đ/n phần thân của 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 và Complex, trong đó lớp Complex kế thừa lớp Real class Real { protected: float r; public: Real(float a=0){ r = a; } //tiếp ở hình bên }; class Real { //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=0, float 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 và 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 quả chạy [...]... dẫn xuất; hoặc tiếp tục là hàm ảo trong lớp đó, khi đó lớp dẫn xuất này lại là trừu tượng Kế thừa bội Bài tập về nhà nghiên cứu Tóm tắt Khái niệm cơ bản về kế thừa Cách phân loại kế thừa Tính đa hình và cách cài đặt Sự khác nhau giữa hàm ảo và hàm thông thường Lớp trừu tượng và hàm ảo thuần túy Kế thừa bội Bài tập Bài 1: Xây dựng cây các lớp số: gồm các lớp Number, Integer, Fraction,... z.r = x.r +r; return z; } virtual void Print(){ cout