Chúng ta có thể kế thừa từ nhiều lớp cha sử dụng đa kế thừa, điều này giúp lớp con có thể thừa hưởng nhiều đặc tính từ các lớp cha khác nhau. Let’s go!

Một số vấn đề ở đa kế thừa

Bởi vì đa kế thừa giúp lớp con thừa hưởng các phương thức và thuộc tính của lớp cha vì vậy nhiều lớp “cha” sẽ có thể gây ra 1 số vấn đề như:

  • Phân biệt những thuộc tính cùng tên đến từ những lớp cha
  • Thứ tự gọi constructor và destructor
  • Giải quyết thừa kế xung độ -… more

Ví dụ:

    #include <iostream>
    using namespace std;
     
    class Base_1 {
    	public:
    	int value;
     
    	Base_1() {
    		value = 1;
    		cout << "Base_1 constructor..." <<endl;
    	}
    	void Access() {
    		cout << "Base_1 access..." << endl;
    	}
    	void Something_1() {};
    };
     
    class Base_2 {
    	public:
    	int value;
     
    	Base_2() {
    		value = 2;
    		cout << "Base_2 constructor..." <<endl;
    	}
    	void Access() {
    		cout << "Base_2 access..." << endl;
    	}
    	void Something_2() {};
    	void Something_3() {};
    };
     
    class Derived : public Base_1, public Base_2 {
    	public:
    	Derived() {
    		cout << "Derived constructor..." << endl;
    	}
    };
     
    int main() {
    	// your code goes here
    	Derived a;
    	cout << a.value << endl;
    	return 0;
    }

Đối với constructor, chương trình dường như gọi theo thứ tự chúng ta khai báo nhưng khi xuất ra giá trị của value chúng ta gặp phải lỗi:

  error: request for member value is ambiguous

Lỗi “mơ hồ” không biết nên dùng biến value của lớp cha nào :)

Có nên dùng đa kế thừa

Nếu chúng không gặp trường hợp mơ hồ như ví dụ trên, nhưng có thể thấy nhiều vấn đề cần giải quyết bằng đa kế thừa cũng có thể giải quyết bằng đơn kế thừa. Vậy nên nếu bạn muốn chương trình trở nên phức tạp và tin tưởng có thể kiểm soát được, bạn có thể chọn đa kế thừa.

Tổng kết

Một đặc điểm khác của kế thừa mà chúng ta mới vừa tìm hiểu - đa kế thừa với sự tìm ẩn nhiều rủi ro và không phải là lựa chọn thích hợp cho 1 chương trình đơn giản nhưng tìm hiểu và biết nó thì vẫn tốt hơn mà đúng không? Nếu có thắc mắc các bạn bình luận bên dưới để tụi mình giải đáp nhé. Pie~