#include <iostream>
class base
{
public:
base(int size) : size_(size) {}
virtual int get_size() const { return size_; }
private:
int size_;
};
std::ostream& operator<<(std::ostream& os, const base& obj) {
os << "base size=" << obj.get_size() << std::endl;
return os;
}
class derived1 : public base
{
public:
derived1(int size) : base(size) {}
virtual int get_size() const {
return 2 * base::get_size();
}
};
std::ostream& operator<<(std::ostream& os, const derived1& obj) {
os << "derived1 size=" << obj.get_size() << std::endl;
return os;
}
int main(int argc, char* argv[]) {
base* b1 = new base(3);
std::cout << "b1 size is: " << b1->get_size() << std::endl;
std::cout << b1 << std::endl;
std::cout << *b1 << std::endl;
base* b2 = new derived1(4);
std::cout << "b2 size is: " << b2->get_size() << std::endl;
std::cout << b2 << std::endl;
std::cout << *b2 << std::endl;
delete b1;
delete b2;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgYmFzZQp7CnB1YmxpYzoKICAgYmFzZShpbnQgc2l6ZSkgOiBzaXplXyhzaXplKSB7fQoKICAgdmlydHVhbCBpbnQgZ2V0X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplXzsgfQoKcHJpdmF0ZToKICAgaW50IHNpemVfOwp9OwoKc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IGJhc2UmIG9iaikgewogICBvcyA8PCAiYmFzZSBzaXplPSIgPDwgb2JqLmdldF9zaXplKCkgPDwgc3RkOjplbmRsOwogICByZXR1cm4gb3M7Cn0KCmNsYXNzIGRlcml2ZWQxIDogcHVibGljIGJhc2UKewpwdWJsaWM6CiAgIGRlcml2ZWQxKGludCBzaXplKSA6IGJhc2Uoc2l6ZSkge30KCiAgIHZpcnR1YWwgaW50IGdldF9zaXplKCkgY29uc3QgeyAKICAgICAgcmV0dXJuIDIgKiBiYXNlOjpnZXRfc2l6ZSgpOwogICB9Cn07CgpzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgZGVyaXZlZDEmIG9iaikgewogICBvcyA8PCAiZGVyaXZlZDEgc2l6ZT0iIDw8IG9iai5nZXRfc2l6ZSgpIDw8IHN0ZDo6ZW5kbDsKICAgcmV0dXJuIG9zOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKSB7CgogICBiYXNlKiBiMSA9IG5ldyBiYXNlKDMpOwogICBzdGQ6OmNvdXQgPDwgImIxIHNpemUgaXM6ICIgPDwgYjEtPmdldF9zaXplKCkgPDwgc3RkOjplbmRsOwoKICAgc3RkOjpjb3V0IDw8IGIxIDw8IHN0ZDo6ZW5kbDsKICAgc3RkOjpjb3V0IDw8ICpiMSA8PCBzdGQ6OmVuZGw7CgogICBiYXNlKiBiMiA9IG5ldyBkZXJpdmVkMSg0KTsKICAgc3RkOjpjb3V0IDw8ICJiMiBzaXplIGlzOiAiIDw8IGIyLT5nZXRfc2l6ZSgpIDw8IHN0ZDo6ZW5kbDsKCiAgIHN0ZDo6Y291dCA8PCBiMiA8PCBzdGQ6OmVuZGw7CiAgIHN0ZDo6Y291dCA8PCAqYjIgPDwgc3RkOjplbmRsOwoKICAgZGVsZXRlIGIxOwogICBkZWxldGUgYjI7CiAgIHJldHVybiAwOwp9