Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khác biệt giữa Nạp chồng hàm và Ghi đè hàm trong C++

Trong bài viết này, chúng ta sẽ hiểu sự khác biệt giữa nạp chồng hàm (function overloading) và ghi đè hàm (function overriding) trong C++.

Nạp chồng (Overloading)

  • Không sử dụng từ khóa đặc biệt.
  • Khai báo hàm khác nhau chỉ về số lượng hoặc kiểu tham số.
  • Xảy ra tại thời gian biên dịch (compile time).
  • Constructor có thể nạp chồng.
  • Destructor không thể nạp chồng.
  • Dùng để đạt được liên kết sớm (early binding).
  • Phiên bản hàm được gọi xác định bởi số lượng hoặc kiểu tham số.
  • Các hàm được định nghĩa lại với cùng tên, khác số lượng hoặc kiểu tham số.

Ghi đè (Overriding)

  • Khai báo hàm giữ nguyên (cùng tên, cùng tham số).
  • Xảy ra tại thời gian chạy (runtime).
  • Hàm ảo (virtual) không thể bị ghi đè (Lưu ý: hàm ảo ĐƯỢC thiết kế để ghi đè, văn bản gốc có thể nhầm lẫn).
  • Destructor có thể được ghi đè.
  • Ghi đè còn gọi là liên kết muộn (late binding).
  • Hàm bị ghi đè trong lớp cơ sở đi kèm từ khóa 'virtual'.
  • Địa chỉ đối tượng lớp con gán cho con trỏ lớp cơ sở, hàm được gọi qua con trỏ.
  • Khi định nghĩa hàm, dùng từ khóa 'virtual' trong lớp cơ sở.
  • Cùng hàm được định nghĩa lại trong lớp dẫn xuất dùng từ khóa 'override' (C++11).