Hàm ảo (virtual) được phân giải tại runtime (late binding). Hàm inline được thay thế mã tại compile-time. Khi gọi hàm ảo qua con trỏ/tham chiếu cơ sở → không thể inline (không biết kiểu động lúc biên dịch). Khi gọi qua đối tượng cụ thể (không qua con trỏ/tham chiếu) → có thể inline vì trình biên dịch biết kiểu chính xác.
Ví dụ
#include <iostream>
using namespace std;
class Base { public: virtual void f() { cout << "Base\n"; } };
class Derived : public Base { public: void f() override { cout << "Derived\n"; } };
int main() {
Base b; Derived d;
Base *ptr = &d;
b.f(); // Có thể inline (gọi qua object Base)
ptr->f(); // KHÔNG inline (gọi qua pointer, late binding)
return 0;
}
Kết quả
Base Derived