[ C++ ] Kế thừa trong C++ [Lập trình hướng đối tượng với C++]

Kế thừa trong C++ (Inheritance)


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();

   getch();
}

//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.