Sự kế thừa và các vấn đề liên quan- Phần 3
Xem thêm Sự kế thừa và các vấn đề liên quan- Phần 2
Những thành phần nào được thừa kế:
Về nguyên tắc, lớp dẫn xuất kế thừa tất cả các member của lớp cơ sở ngoại trừ:
Nếu lớp cở sở không có hàm tạo mặc định hoặc bạn muốn gọi hàm tạo khi tạo 1 đối tượng ở lớp dẫn xuất, bạn có thể định nghĩa nó ở hàm tạo của lớp dẫn xuất theo cú pháp:
derived_constructor_name (parameters) : base_constructor_name (parameters) {...}
Ví dụ:
Những thành phần nào được thừa kế:
Về nguyên tắc, lớp dẫn xuất kế thừa tất cả các member của lớp cơ sở ngoại trừ:
- Constructor và destructor
- operator=()
- Friend functions, friend classes. Cái này mình chưa rõ lắm.
Nếu lớp cở sở không có hàm tạo mặc định hoặc bạn muốn gọi hàm tạo khi tạo 1 đối tượng ở lớp dẫn xuất, bạn có thể định nghĩa nó ở hàm tạo của lớp dẫn xuất theo cú pháp:
derived_constructor_name (parameters) : base_constructor_name (parameters) {...}
Ví dụ:
// constructors and derived classes #includeKết quả:using namespace std; class mother { public: mother () { cout << "mother: no parameters\n"; } mother (int a) { cout << "mother: int parameter\n"; } }; class daughter : public mother { public: daughter (int a) { cout << "daughter: int parameter\n\n"; } }; class son : public mother { public: son (int a) : mother (a) { cout << "son: int parameter\n\n"; } }; int main () { daughter cynthia (0); son daniel(0); return 0; }
mother: no parameters daughter: int parameter mother: int parameter son: int parameterBạn cần chú ý hàm tạo của daughter và son:
daughter (int a) // nothing specified: call default son (int a) : mother (a) // constructor specified: call this Lưu ý: Chỉ có kế thừa trực tiếp thôi.Nếu kết hợp tốt sự kế thừa và dùng hàm tạo, bạn có thể dùng nó để bẫy lỗi chương trình ( như kiểm tra tham số nhập vào chẳng hạn)
Nhận xét
Đăng nhận xét