Trang tài liệu
Khóa học C++ nền tảng
Chương 8. Cấu trúc và lớp
Đa kế thừa

Đa kế thừa

Đa kế thừa là một tính năng trong C++, trong đó một lớp có thể kế thừa các đặc điểm (thành viên dữ liệu và hàm thành viên) từ nhiều hơn một lớp cha. Khái niệm này tương tự như kế thừa đơn (trong đó một lớp kế thừa từ một lớp cơ sở duy nhất), nhưng trong đa kế thừa, một lớp có thể có nhiều lớp cơ sở.

Khi một lớp kế thừa nhiều lớp cơ sở, nó trở thành một hỗn hợp các thuộc tính và hành vi của chúng và có thể ghi đè hoặc mở rộng chúng khi cần.

Cú pháp

Đây là cú pháp để khai báo một lớp có nhiều kế thừa:

class DerivedClass : access-specifier BaseClass1, access-specifier BaseClass2, ...
{
    // lớp body
};

DerivedClass sẽ kế thừa các thành viên từ cả BaseClass1 và BaseClass2. access-specifier (như public, protected, or private) xác định khả năng truy cập của các thành viên được kế thừa.

Ví dụ

Dưới đây là một ví dụ về đa kế thừa đang hoạt động:

#include <iostream>

//Lớp cơ sở 1
class Animal
{
public:
    void eat()
    {
        std::cout << "I can eat!" << std::endl;
    }
};

// lớp cơ sở 2
class Mammal
{
public:
    void breath()
    {
        std::cout << "I can breathe!" << std::endl;
    }
};

// Lớp phái sinh kế thừa từ cả Động vật và Động vật có vú
class Dog : public Animal, public Mammal
{
public:
    void bark()
    {
        std::cout << "I can bark! Woof woof!" << std::endl;
    }
};

int main()
{
    Dog myDog;

    // Gọi các thành viên từ cả hai lớp cơ sở
    myDog.eat();
    myDog.breath();
    
    // Gọi một thành viên từ lớp dẫn xuất
    myDog.bark();

    return 0;
}

Ghi chú

Trong một số trường hợp, đa thừa kế có thể dẫn đến các biến chứng như sự mơ hồ và “vấn đề kim cương”. Đảm bảo rằng bạn sử dụng nhiều kế thừa một cách thận trọng và duy trì các lớp mô-đun và có cấu trúc tốt để ngăn ngừa sự cố.

Để biết thêm thông tin về đa thừa kế C++ và các chủ đề liên quan, hãy tham khảo tài liệu C++ hoặc hướng dẫn lập trình C++ toàn diện.