Kế thừa là một đặc trưng quan trọng trong lập trình hướng đối tượng (OOP). Sự kế thừa trong các ngôn ngữ lập trình như C++, Java, C#, VB.Net,.. cơ bản là giống nhau.
Trong lập trình C++, có thêm khái niệm đa kế thừa mà các ngôn ngữ khác đã bỏ chức năng này do sự nhập nhằng khi sử dụng.
Khái niệm: Kế thừa là cách tạo lớp mới từ các lớp đã được định nghĩa từ trước [Wiki]
Trong đó:
- Class A: lớp cơ sở (lớp cha) - supper class
- Class B: lớp dẫn xuất (lớp con) - sub class
Class B có thể dùng được hầu hết các phương thức (hàm thành viên) và các thuộc tính (biến thành viên) của lớp A ngoại trừ các các phương thức và các hàm các tính chất private.
Cài đặt: để cài đặt lớp kế thừa ta dùng toán tử ":". Ví dụ B kế thừa A viết là: B:A
[Code]
class A{
....
};
class B:A{
...
};
Lưu ý:
- Một lớp cha có thể có nhiều lớp con (có phép kế thừa)
- Đến lượt mình mỗi lớp con lại có thể có các con khác
- Trong C++ cho phép đa kế thừa (một lớp con có thể nhận hơn 1 lớp cha)
Xet ví dụ: Xây dựng lớp cha (Nguoi), lớp con (HocSinh)
[Code Tubor C++]
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
// lop cha
class Nguoi
{
protected:
char hoTen[30];
int namSinh;
private:
char soThich[50]; // so thich
public:
Nguoi(){ // khoi tao lop Nguoi
strcpy(hoTen,"Nguyen Van A");
namSinh=1990;
strcpy(soThich,"Lap trinh");
}
void InTT(); // In thông tin
};
// lop con
class HocSinh : public Nguoi
{
protected:
int maHS;
public:
void Nhap();
void InTT();
};
// InTT cua cha (Nguoi)
void Nguoi::InTT()
{
cout << "\n Nam sinh : " << namSinh;
cout << "\n Ho ten : " << hoTen;
cout << "\n So thich : " << soThich;
}
// InTT cua con (HocSinh)
void HocSinh::InTT()
{
cout << "\n Ma hoc sinh : " << maHS;
cout << "\n Nam sinh : " << namSinh;
cout << "\n Ho ten : " << hoTen;
}
// Nhap thong tin
void HocSinh::Nhap()
{
cout << "\n Nam sinh : "; cin>> namSinh;
cout << "\n Ho ten : "; gets(hoTen);
cout << "\n Ma hoc sinh: "; cin>> maHS;
}
// ham main ---------------------------------------------
void main(){
// khai bao doi tuong Nguoi
Nguoi a; a.InTT();
// khai bao doi tuong HocSinh
HocSinh t; t.Nhap(); t.InTT();//Giải thích: Do lớp HocSinh kế thừa lớp cha Nguoi => lớp HocSinh chứa các thuộc tính: hoTen, namSinh, maHS; các phương thức: InTT(); Nhap(); lớp HocSinh không thể kế thừa được thuộc tính soThich do tích chất của nó là private.
getch();
}
0 nhận xét:
Đăng nhận xét