class base1{
public:
virtual int getX(){
return x;
}
int x;
};
class derived: public base1{
public:
virtual int getX(){
return x+1;
}
};
1 derived d;
2 base1 b;
3 base1* ptrBase;
4 b = (base1)d;
5 ptrBase = &d;
6 ptrBase = &b;
فرقی نمی کنه شما شی b رو یا با خط 2 و یا با خط 4 تعریف کنید شی b از نوع کلاس base1 ساخته می شه.
ولی اشاره گر یک ادر س فقط حالا شما اگه ادرس شی d رو در اشاره گر ptrBase قرار بدید شی ای ساخته نمی شه بلکه فقط با استفاده از جایی که به اون اشاره می کنه توابع خودش رو فراخوانی می کنه, حالا می تونه ادرس تابع getX در کلاس مشتق شده عوض شده باشه یعنی همون کاری که ما با کلمه کلیدی virtual انجام می دیم.