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ừ:
  • Constructor và destructor
  • operator=()
  • Friend functions, friend classes. Cái này mình chưa rõ lắm.
Mặc dù hàm tạo (constructor) và hàm hủy(destructor) không được kế thừa nhưng hàm tạo và hàm hủy mặc định luôn được gọi khi tạo hoặc hủy 1 đối tượng lớp dẫn xuất.
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
#include 
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;
}
Kết quả:
mother: no parameters
daughter: int parameter
 
mother: int parameter
son: int parameter
Bạ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

Bài đăng phổ biến từ blog này

Kinh nghiệm tạo biểu đồ Use Case

PHÉP TOÁN XOR

Phần mềm hỗ trợ vẽ bản đồ tư duy trên máy tính

Power Designer 12.5