#include <iostream>
using namespace std;
class one{
int a;
public:
void get(int);
virtual void show();
};
class two:public one
{
int b;
public:
void getb(int);
void dis();
void show() override;
};
void one::get(int x) //if i write void two::get(int x) here it gives error
{
a = x;
}
void one::show() //same goes for this function why can't i define it as `void two::show()`?
{
cout << a << endl;
}
void two::show() //no problem !!
{
cout << "two's version" << endl;
}
int main()
{
two ob;
int x;
cin >> x;
ob.get( x );
ob.show();
ob.one::show();
one *pob = &ob; // a one pointer can point to a two object
pob->show(); // but this will invoke one::show()
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIG9uZXsKICAgIGludCBhOwpwdWJsaWM6CiAgICB2b2lkIGdldChpbnQpOwogICAgdmlydHVhbCB2b2lkIHNob3coKTsKfTsKCmNsYXNzIHR3bzpwdWJsaWMgb25lCnsKICAgIGludCBiOwpwdWJsaWM6CiAgICB2b2lkIGdldGIoaW50KTsKICAgIHZvaWQgZGlzKCk7CiAgICB2b2lkIHNob3coKSBvdmVycmlkZTsgIAp9OwoKdm9pZCBvbmU6OmdldChpbnQgeCkgIC8vaWYgaSB3cml0ZSB2b2lkIHR3bzo6Z2V0KGludCB4KSBoZXJlIGl0IGdpdmVzIGVycm9yCnsKICAgIGEgPSB4Owp9Cgp2b2lkIG9uZTo6c2hvdygpICAvL3NhbWUgZ29lcyBmb3IgdGhpcyBmdW5jdGlvbiB3aHkgY2FuJ3QgaSBkZWZpbmUgaXQgYXMgYHZvaWQgdHdvOjpzaG93KClgPwp7CiAgY291dCA8PCBhIDw8IGVuZGw7Cn0KCnZvaWQgdHdvOjpzaG93KCkgIC8vbm8gcHJvYmxlbSAhIQp7CiAgY291dCA8PCAidHdvJ3MgdmVyc2lvbiIgPDwgZW5kbDsKfQoKaW50IG1haW4oKQp7CiAgICB0d28gb2I7CiAgICBpbnQgeDsKICAgIGNpbiA+PiB4OwogICAgb2IuZ2V0KCB4ICk7CiAgICBvYi5zaG93KCk7CiAgICBvYi5vbmU6OnNob3coKTsgCiAgICBvbmUgKnBvYiA9ICZvYjsgIC8vIGEgb25lIHBvaW50ZXIgY2FuIHBvaW50IHRvIGEgdHdvIG9iamVjdCAKICAgIHBvYi0+c2hvdygpOyAgICAvLyBidXQgdGhpcyB3aWxsIGludm9rZSBvbmU6OnNob3coKQp9