Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: thừa kế hàm tạo, hàm hủy và các toán tử gán

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    4

    Mặc định thừa kế hàm tạo, hàm hủy và các toán tử gán

    em đang học c++ thì lớp dẫn xuất không thừa kế hàm tạo, hàm hủy và toán tử gán thì nó có thể gọi các hàm này được không. nếu có thì các bác nói rõ nó như thế nào em với..

    và có thể không xây dưng hàm tạo trong lấp dẫn xuất được không ạ
    em cảm ơn

  2. #2
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Trích dẫn Nguyên bản được gửi bởi leecuong Xem bài viết
    em đang học c++ thì lớp dẫn xuất không thừa kế hàm tạo, hàm hủy và toán tử gán thì nó có thể gọi các hàm này được không. nếu có thì các bác nói rõ nó như thế nào em với..

    và có thể không xây dưng hàm tạo trong lấp dẫn xuất được không ạ
    em cảm ơn
    Giả sử lớp cơ sở là Base, lớp dẫn xuất là Derived

    - Hàm tạo chỉ nên gọi trực tiếp trong initialization list của hàm tạo lớp dẫn xuất
    Ví dụ Derived:: Derived(int x): Base(x) {}
    Còn bình thường thì hàm tạo sẽ được gọi khi dùng lệnh new hoặc khai báo biến
    - Hàm huỷ không nên gọi trực tiếp trong bất kỳ trường hợp nào (nếu có thì mình chưa từng biết đến ). Hàm huỷ tự được gọi khi ra ngoài phạm vi của nó, hoặc khi delete con trỏ đến đối tượng
    - Toán tử gán thì cứ gọi thoải con gà mái


    Còn đây là phần lý thuyết bạn muốn hỏi:
    - Khi không có hàm tạo nào, compiler sẽ tự sinh cho bạn hàm tạo mặc định Derived:: Derived(). Hàm tạo mặc định đó sẽ gọi hàm tạo mặc định của lớp Base (và các khởi tạo mặc định các dữ liệu khai báo trong lớp Derived).
    - Đối với hàm huỷ, hàm tạo copy và toán tử gán (=), compiler sẽ tự sinh cho bạn nếu bạn không khai báo cụ thể. Tương tự, mấy cái tự sinh đó cũng tương ứng gọi những hàm tạo / toán tử gán đối với các lớp gốc và các dữ liệu thành phần
    - Các hàm tạo / toán tử mà compiler tự sinh, nếu việc tự sinh theo nguyên tắc trên sẽ phát sinh lỗi, thì sẽ không báo lỗi cho đến khi bạn sử dụng nó. Hay nói cách khác, chúng chỉ được tự sinh khi dùng đến. Ví dụ lớp A có dữ liệu const int x; thì khi gọi hàm gán mới bị báo lỗi (vì biến const không gán được)
    - Vì vậy bạn hoàn toàn có quyền khai báo lớp dẫn xuất không có hàm tạo hàm huỷ, không có toán tử gán mà vẫn dùng được bình thường (Tạo, copy, gán, huỷ) - miễn là các lớp gốc và dữ liệu thành viên cho phép tạo/copy/gán tương ứng.

  3. #3
    Ngày gia nhập
    09 2011
    Bài viết
    4

    thanks bạn, bây giờ thì mình hiểu rồi. vậy là yên tâm cho bài thuyết trình :d

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn