Yêu cầu mọi thông tin sao chép từ blog này phải được ghi rõ đầy đủ: Thông tin được sao chép từ "http://www.dangngochoangthanh.blogspot.com".

Cool wallpaper http://www.fancymessage.com

EMOJI KEYBOARD PRO http://emojiselector.com

THƯ VIỆN HÌNH ĐỘNG FLASH ANIMATION: http://flashanimationlibrary.blogspot.ru/

Hệ thống học trực tuyến đang được phát triển và sẽ đưa vào sử dụng vào cuối năm nay. Hãy xem qua một số demo của Học Trực Tuyến.


HỌC TRỰC TUYẾN ĐÃ CUNG CẤP PHIÊN BẢN TRUY CẬP QUA MOBILE http://dangngochoangthanh.blogspot.com/?m=1

XEM KÊNH HỌC TRỰC TUYẾN TRÊN YOUTUBE



Search on This Blog

Saturday, September 11, 2010

Tính kế thừa – Inheritance

Một tính năng theng chốt của lập trình hướng đối tượng đó là tính kế thừa. Nhờ vào tính kế thừa, nó cho phép một lớp có thể dẫn xuất từ một lớp khác, chính vì thế chúng sẽ tự động tiếp nhận các thành viên của bố mẹ và bổ sung thêm các thành viên của riêng chúng. Tính kế thừa cho phép lớp mới có thể nhận được mọi dữ liệu thành viên (private, protected, public) và các hàm thành viên (trừ hàm tạo, hàm hủy, hàm bạn và hàm toán tử gán =).
Ta có thể xét ví dụ về lớp động vật Animal và minh họa tính kế thừa bằng lược đồ bên dưới.

Hình 13 – Tính kế thừa
Lớp động vật Animal có các thuộc tính thành viên: tên gọi, cân nặng. Các hàm thành viên: di chuyển, ăn. Ta xét hai lớp dẫn xuất của nó là lớp mèo Cat và lớp cá Fish. Lớp Cat có các thuộc tính thành viên riêng: màu lông, màu mắt. Các hàm thành viên riêng: Bắt chuột, Leo cây. Lớp Fish có các thuộc tính thành viên riêng: kiểu vẩy, loại nước (nước ngọt, nước mặn, nước lợ). Các hàm thành viên: bơi, sinh sản (cách thức sinh con như thế nào).

Theo như tính thừa kế, lớp Cat và Fish không những có những thuộc tính thành viên và hàm thành viên riêng của từng lớp, mà nó còn có những thuộc tính thành viên và hàm thành viên của lớp Animal.
Từ này, ta sẽ gọi lớp dẫn xuất Cat và Fish là các lớp con và lớp được dẫn xuất Animal là lớp cơ sở (hay lớp cha). Bạn cũng lưu ý rằng, tên gọi cũng mang tính tương đối, vì một lớp có thể là con của lớp này, nhưng lại là lớp cơ sở của lớp khác. Do đó, để tránh nhầm lẫn, trong những trường hợp cần phân biệt, ta sẽ gọi cụ thể là lớp con của lớp chỉ định, hay lớp cơ sở của lớp chỉ định.
Để quy định một lớp là dẫn xuất từ lớp khác, ta sử dụng toán tử : theo cấu trúc sau
class Animal{
};
class Cat:Animal{

}
class Fish:Animal{

}
Theo cấu trúc khai báo này, thì Cat và Fish là lớp con của lớp cơ sở Animal.
Ví dụ Kết quả
#include using namespace std;
class Animal{
protected:
string name;
int weight;
public:
Animal(void);
Animal(string, int);
void move(void);
void eat(void);
};
class Cat:public Animal{
private:
string colorf;
string colore;
public:
Cat(string, int, string, string);
void catchmouse(void);
void climb(void);
};
void Animal::move(void){
cout<<”I can move”<
}
void Animal::eat(void){
cout<<”I can eat”<
}
Animal::Animal(){
this->name = “”;
this->weight = 0;
}
Animal::Animal(string name, int weight){
this->name = name;
this->weight = weight;
}
void Cat::catchmouse(void){
cout<<”I can catch mouse”<
}
void Cat::climb(void){
cout<<”I can climb tree”<
}
Cat::Cat(string name, int weight, string colorfc, string colorec){
this->name = name;
this->weight = weight;
this->colorf = colorf;
this->colore = colore;
}
int main()
{
Animal an(“Gau”, 100);
Cat ca(“Cat1″, 3, “black”, “blue”);
cout<<”—–Animal Object—–”<
an.eat();
an.move();
cout<<”—–Cat Object—–”<
ca.eat();
ca.move();
ca.catchmouse();
ca.climb();
return 0;
}
—–Animal Object—– I can eat
I can move
—–Cat Object—–
I can eat
I can move
I can catch mouse
I can climb tree
Giải thích: trong chương trình này lớp Cat thừa kế từ lớp Animal. Nó sẽ kế thừa mọi dữ liệu thành viên và hàm thành viên của lớp Animal. Để hàm tạo của lớp Cat có thể truy cập đến các dữ liệu thành viên của lớp Animal, thì các dữ liệu thành viên này phải được khai báo mức truy cập là protected hoặc public. Đối tượng ca của lớp Cat chỉ có thể truy cập đến các phương thức thành viên của lớp cơ sở là Animal khi lớp Animal này được public (Cat:public Animal). Một điều cần lưu ý nữa đó là hàm tạo. Khi thừa kế, thì lớp con sẽ không thừa kế hàm tạo từ lớp cơ sở, nhưng lớp cơ sở cần có một hàm tạo mặc định không đối số (hàm tạo này luôn tồn tại, nếu bạn khai báo thêm một vài hàm tạo, thì cần khai báo một hàm tạo không có đối số).

No comments:

Post a Comment