C++ cho phép hàm ảo có tham số mặc định. Giá trị mặc định được xác định tại **compile-time** dựa trên kiểu tĩnh của con trỏ/tham chiếu, không phải kiểu động của đối tượng.
Ví dụ
#include <iostream>
using namespace std;
class Base {
public:
virtual void f(int a = 0) { cout << "Base: a=" << a << endl; }
};
class Derived : public Base {
public:
void f(int a) override { cout << "Derived: a=" << a << endl; }
};
int main() {
Derived d;
Base *b = &d;
b->f(); // Gọi Derived::f(0) - dùng default của Base
return 0;
}
Kết quả
Derived: a=0
Lưu ý: Tham số mặc định không tham gia chữ ký hàm (signature). Hàm f(int) của Derived ghi đè f(int=0) của Base. Giá trị mặc định được thay thế tại compile-time theo kiểu tĩnh (Base*), còn hàm ảo được phân giải runtime.