#include <iostream>
using namespace std;
class monitor
{
public:
virtual int price() = 0; // virtual, meaning ignore and go straight to other subclasses,
//if the type WAS NOT nineteenInchMonitor, it would use this.
};
class nineteenInchMonitor : public monitor
{
int price()
{
return 99; // return price
}
};
class twentyInchMonitor : public monitor
{
int price()
{
return 129;
}
};
int sell (monitor *mon)
{
return mon->price(); // get price() of smallMonitor, type nineteenInchMonitor
}
int main()
{
nineteenInchMonitor smallMonitor; twentyInchMonitor bigMonitor; // makes nineteenInchMonitor, type smallMonitor
cout << sell (&bigMonitor) << endl; // pass pointer onto sell
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgbW9uaXRvcgp7CglwdWJsaWM6CgkJdmlydHVhbCBpbnQgcHJpY2UoKSA9IDA7IC8vIHZpcnR1YWwsIG1lYW5pbmcgaWdub3JlIGFuZCBnbyBzdHJhaWdodCB0byBvdGhlciBzdWJjbGFzc2VzLCAKCQkvL2lmIHRoZSB0eXBlIFdBUyBOT1QgbmluZXRlZW5JbmNoTW9uaXRvciwgaXQgd291bGQgdXNlIHRoaXMuCn07CgpjbGFzcyBuaW5ldGVlbkluY2hNb25pdG9yIDogcHVibGljIG1vbml0b3IgCnsgCglpbnQgcHJpY2UoKSAKCXsgCgkJcmV0dXJuIDk5OyAvLyByZXR1cm4gcHJpY2UKCX0gCn07CgpjbGFzcyB0d2VudHlJbmNoTW9uaXRvciA6IHB1YmxpYyBtb25pdG9yIAp7IAoJaW50IHByaWNlKCkgCgl7IAoJCXJldHVybiAxMjk7IAoJfSAKfTsKCmludCBzZWxsIChtb25pdG9yICptb24pCnsKCXJldHVybiBtb24tPnByaWNlKCk7IC8vIGdldCBwcmljZSgpIG9mIHNtYWxsTW9uaXRvciwgdHlwZSBuaW5ldGVlbkluY2hNb25pdG9yCn0KCmludCBtYWluKCkKewoJbmluZXRlZW5JbmNoTW9uaXRvciBzbWFsbE1vbml0b3I7IHR3ZW50eUluY2hNb25pdG9yIGJpZ01vbml0b3I7IC8vIG1ha2VzIG5pbmV0ZWVuSW5jaE1vbml0b3IsIHR5cGUgc21hbGxNb25pdG9yCgljb3V0IDw8IHNlbGwgKCZiaWdNb25pdG9yKSA8PCBlbmRsOyAvLyBwYXNzIHBvaW50ZXIgb250byBzZWxsCglyZXR1cm4gMDsKfQo=