توابع مجازی (به انگلیسی: Virtual Functions) در ارث بری توابع کاربرد دارند که توضیح خواهم داد . در هنگام تعریف یک تابع در یک کلاس شما می توانید در ابتدای تعریف تابع کلمه کلیدی virtual رو برای مجازی کردن تابع استفاده کنید . مثال :

class A {
  .
  .
  .
public:
  virtual void setage(int age);
  .
  .
  .
}

در حالت عادی کاربرد توابع مجازی مانند توابع حقیقی است و هیچ فرقی ندارد، امااگر یک کلاس از این کلاس شما مشتق شود و تابعی با همین نام اما به صورت تابع غیرمجازی داشته باشد تابع متعلق به کلاس مشتق شده اجرا خواهد شد.

این ساختار در مواردی کاربرد دارد که شما تشخیص می‌دهید که ممکن است در بعضی شرایط نیاز باشد که تابعی که در کلاس پایه تعریف می‌کنید تغییر ساختار موقتی داشته باشد.