Hướng đối tượng Tính thừa kế
Trang 1I Cách xây dựng
Tính thừa kế là khả năng sử dụng lại dữ liệu và phương thức của một lớp khi khai báo một lớp mới.
Lớp cha (base classs):
class animal
{ public:
void eat(void);
void sleep(void);
void breathe(void);
};
Lớp con (derived class):
class snake : public animal { int fench;
int venomous;
public:
void bite (animal sprey) } anaconda ;
Lớp con (derived class):
class mouse : public animal
{ int tail;
int ears;
int leg;
public:
void run(void);
} jerry ;
Quan
hệ
IS-A
Trang 2Truy cập các thành viên của lớp cha
Lớp con được tham chiếu đến các dữ liệu
và phương thức của lớp cha.
Lớp cha (và do đó các đối tượng của nó) không có quyền truy cập đến lớp con.
Tùy vào việc khai báo quyền truy cập
(public | private | protected) của các thành phần ở lớp cha mà có sự khác nhau về
khả năng truy cập các thành phần này
Trang 3Truy cập các thành viên của lớp cha
None None
X private
None X
X protected
X X
X public
Access right from other objects
Access right from members of derived class
Access right from its
members Permission label
Trang 4Các kiểu thừa kế
Khai báo:
class class_name: inheritance_type base_class {
private: data and function list public: data and funtion list protected: ……
} object_list;
Inheritance_type có thể là public, private hoặc
protected
Không được thừa kế private
protected private
protected protected
protected private
public public
Thừa kế kiểu protected
Thừa kế kiểu private
Thừa kế kiểu public
Thành viên của
lớp cha là
Trang 5II Khi có phương thức xây dựng
và phương thức hủy bỏ (1)
Constructor của lớp cơ sở được gọi đầu
tiên, sau đó constructor thích hợp của lớp con mới được gọi
Ví dụ: class Base
{
protected: int a;
public: Base(void) {a=0;} //default constructor
Base ( int c) {a=c;} // one argument constructor }
class Derived
{
public: Derived():Base(){} //default constructor
Derived (int c):Base(c) {} //one argument constructor }
Chú ý dấu
“:” ở đây
Trang 6II Khi có phương thức xây dựng
và phương thức hủy bỏ (2)
Destructor của lớp con được gọi đầu tiên, sau đó constructor của lớp cha mới được gọi
Nếu constructor của lớp con không làm gì hoặc không có thêm các hàm thành viên nào được bổ sung trong lớp con thì
destructor của lớp con có thể là một hàm trống.
Trang 7Các lớp container (1)
Khi một lớp X được dẫn xuất public từ một lớp Y, ta nói X là một Y (quan hệ ISA)
Ngược lại khi lớp X có chứa một thành
viên của lớp khác (lớp Y) ta nói X chứa Y hay nói cách khác X là một container
Ví dụ:
class X
{ public: Y abc;
Z def;}
X là container chứa một thành viên thuộc lớp Y
X là container chứa một thành viên thuộc lớp Z
Trang 8Các lớp container (2)
class engine
{ private: int num; //number of turbofan
public: engine (int s) {num=s;}
};
class Jet
{private: int jt;
engine eobj;
public: Jet(int x,int y): eobj (y) {jt=x}
}
Jet là một lớp container chứa member eobj thuộc lớp engine
Dấu “:” này để báo cho biết lớp nào sẽ được gọi
constructor này được dự kiến sẽ
có gọi tới lớp engine
Trang 9III ĐA THỪA KẾ (Kế thừa bội)
Đa thừa kế là tiến trình tạo một lớp mới từ
hai lớp cha.
Cú pháp:
class base1
{public: void a(void);}
class base2
{public: void b(void);}
{public: void c(void);
} derive_object;
Liệt kê danh sách hai lớp cha cách nhau bởi dấu phẩy
Đối tượng của lớp thừa kế này sẽ được thừa kế mọi
thành viên public và protected của lớp base1
và base2
Trang 10IV Phương thức thiết lập với lớp kế thừa bội
(constructor của lớp đa thừa kế)
Cú pháp:
class base1
{public:
base1();
base1(type v); // các constructor của lớp base1
void a(void);}
class base2
{public:
base2(); //constructor của lớp base2
void b(void);}
class derived : public base1,base2
{public:
derived(): base1(),base2();//constructor của lớp con
void c(void);
} derive_object;
Khi derived_object được khởi tạo thì các
constructor được gọi theo thứ tự:
2 constructor của các lớp cha theo như thứ
tự được liệt kê
3 constructor của bản thân lớp này
Ví dụ 17
Ví dụ 18
Trang 11V Thiết kế theo hướng đối tượng