آره وقتی که به شکل بالا توابع virtual رو صدا میزنین خروجی یکیه
این مثال رو ببینید این جا زمانی که از virtual استفاده نشه تابع Base صدا زده میشه در حالی که باید تابع داخل Drived صدا زده بشه
#include <iostream>
using namespace std;
class Base
{
public:
void func(){cout<<"In Base\n";}
};
class Drived:public Base
{
public:
void func(){cout<<"In Drived\n";}
};
int main ()
{
Base *drived=new Drived;
drived->func();
return 0;
}
ضمنا استفاده از virtual به خوانایی کد هم کمک می کنه چون با دیدن توابع به شکل Virtual میشه فهمید که داخل کلاسایی که ارث برده شده override شدن .