C++ Hỗ Trợ đa Kế Thừa Trong Lập Trình Hướng đối Tượng - Góc Học IT
Có thể bạn quan tâm
1. Đa kế thừa (multiple inheritance) là gì?
Lớp dẫn xuất kế thừa từ nhiều lớp cơ sở gọi là đa kế thừa trong C++.
Cú pháp:
class Lớp_Cơ_Sở_1{ //Định nghĩa lớp cơ sở 1 }; class Lớp_Cơ_Sở_2{ //Định nghĩa lớp cơ sở 2 }; class Lớp_Dẫn_Xuất : <Từ_khóa_dẫn_xuất> Lớp_Cơ_Sở_1, <Từ_khóa_dẫn_xuất> Lớp_Cơ_Sở_2{ //Định nghĩa lớp dẫn xuất }<Từ_khóa_dẫn_xuất> có thể là private, public hoặc protected. Các bạn có thể đọc lại bài Dẫn xuất public, protected, private trong kế thừa và minh họa với C++ để hiểu rõ về các từ khóa dẫn xuất này.
Lớp dẫn xuất có thể kế thừa từ nhiều hơn 2 lớp cơ sở. Nhưng khi sử dụng các bạn nên cân nhắc cẩn thận, không nên lạm dụng đa kế thừa trong C++. Bởi vì khi kế thừa từ quá nhiều lớp sẽ dẫn đến rối rắm cho chính lập trình viên.#include <iostream> using namespace std; class base1{ private: int x1; protected: float y1; public: void nhap1(){ cout<<"\nNhap gia tri x1:"; cin>>x1; } }; class base2{ private: int x2; public: void nhap2(){ cout<<"\nNhap gia tri x2:"; cin>>x2; } }; class derived : public base1, public base2{ private: int x; public: void nhap(){ cout<<"\nNhap gia tri x:"; cin>>x; } }; void main(){ derived obj; system("pause"); }
Trong ví dụ trên, lớp dẫn xuất derived kế thừa public từ lớp base1 và base2 sẽ có:
– x1, x2 không thể truy cập trong lớp derived.
– x là thuộc tính private của lớp derived.
– y1 là thuộc tính protected của lớp derived.
– nhap1(), nhap2(), nhap() là các hàm public của lớp derived.
2. Lời gọi hàm mơ hồ khi sử dụng đa kế thừa trong C++
Có trường hợp 2 lớp cơ sở có hàm trùng tên với nhau, hàm này không được định nghĩa lại trong lớp dẫn xuất. Nếu đối tượng của lớp dẫn xuất gọi hàm đó thì trình biên dịch sẽ báo lỗi.
Trình biên dịch không biết là đối tượng của lớp dẫn xuất muốn gọi hàm trong lớp cơ sở nào. Hiện tượng này gọi là lời gọi hàm mơ hồ (ambiguity).#include <iostream> using namespace std; class base1{ private: int x1; protected: float y1; public: void nhap(){ cout<<"\nNhap gia tri x1:"; cin>>x1; } }; class base2{ private: int x2; public: void nhap(){ cout<<"\nNhap gia tri x2:"; cin>>x2; } }; class derived : public base1, public base2{ }; void main(){ derived obj; obj.nhap();//error "derived::nhap" is ambiguous system("pause"); }
Để giải quyết vấn đề này, chúng ta phải chỉ rõ đang gọi hàm của lớp cơ sở nào.
- Giả lập điều khiển đèn tín hiệu giao thông có nút bấm với Arduino
- Sử dụng kiểu dữ liệu số (number) trong PHP
- Các kiểu dữ liệu cơ bản trong C++
- Java collections framework: lớp Vector và lớp Stack
- Lớp FileReader và FileWriter trong Java
Từ khóa » đa Xạ Trong C++
-
Đa Hình Trong C++ | TopDev
-
Tính Đa Hình Trong Lập Trình Hướng Đối Tượng - CodeLearn
-
Tính Đa Hình Trong Lập Trình Hướng Đối Tượng
-
Tính đa Hình Trong C++ - Học Lập Trình C++ Online - VietTuts
-
Đa Hình Trong C++ - Techacademy
-
Lập Trình C++ - Đa Hình (Polymorphsim)
-
Polymorphism In C++ - Viblo
-
Kế Thừa & đa Hình Trong Lập Trình Hướng đối Tượng - CppDeveloper
-
2.8. Tính đa Hình - Lập Trình Tân Binh
-
Tính đa Hình Trong OOP Và Những Loại đa Hình Bạn Cần Biết
-
Đa Hình Trong Lập Trình Hướng đối Tượng | How Kteam
-
Đa Hình Trong C++ - TEK4
-
Tính đa Hình Trong Lập Trình Hướng đối Tượng - .vn
-
Tính đa Hình, Phương Thức ảo, Lớp Trừu Tượng Trong C++
-
Chi Tiết Bài Học Đa Kế Thừa Và Kế Thừa Nhiều Tầng - Vimentor
-
Top 13 đa Hình Là Gì
-
Tính đa Hình (Polymorphism) Trong C# Là Gì? Khái Niệm ... - Thủ Thuật