#include <iostream>
#include <sstream>
#include <string>
class Foo {
public:
Foo() { format_string(); }
Foo(int a) { format_string(a); }
void print() { std::cout << str; }
protected:
std::string str;
void format_string(int a = 0)
{
std::stringstream stream;
stream << "{a: " << a << "}\n";
str = stream.str();
}
};
class Bar : public Foo {
public:
Bar() { format_string(); }
Bar(int a, int b) { format_string(a, b); }
protected:
void format_string(int a = 0, int b = 0)
{
std::stringstream stream;
stream << "{a: " << a << ", b: " << b << "}\n";
str = stream.str();
}
};
int main() {
Foo t1 = Bar(10,10);
Bar t2 = Bar(20,20);
Foo *t3 = new Bar(30,30);
Foo t4 = Bar(10, 20);
t1.print();
t2.print();
t3->print();
t4.print();
delete t3;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KCmNsYXNzIEZvbyB7CnB1YmxpYzoKICAgIEZvbygpIHsgZm9ybWF0X3N0cmluZygpOyB9CiAgICBGb28oaW50IGEpIHsgZm9ybWF0X3N0cmluZyhhKTsgfQoKICAgIHZvaWQgcHJpbnQoKSB7IHN0ZDo6Y291dCA8PCBzdHI7IH0KICAgIApwcm90ZWN0ZWQ6CglzdGQ6OnN0cmluZyBzdHI7CgkKCXZvaWQgZm9ybWF0X3N0cmluZyhpbnQgYSA9IDApCgl7CgkJc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwoJCXN0cmVhbSA8PCAie2E6ICIgPDwgYSA8PCAifVxuIjsKCQlzdHIgPSBzdHJlYW0uc3RyKCk7Cgl9Cn07CgpjbGFzcyBCYXIgOiBwdWJsaWMgRm9vIHsKcHVibGljOgogICAgQmFyKCkgeyBmb3JtYXRfc3RyaW5nKCk7IH0KICAgIEJhcihpbnQgYSwgaW50IGIpIHsgZm9ybWF0X3N0cmluZyhhLCBiKTsgfQogICAgCnByb3RlY3RlZDoKCXZvaWQgZm9ybWF0X3N0cmluZyhpbnQgYSA9IDAsIGludCBiID0gMCkKCXsKCQlzdGQ6OnN0cmluZ3N0cmVhbSBzdHJlYW07CgkJc3RyZWFtIDw8ICJ7YTogIiA8PCBhIDw8ICIsIGI6ICIgPDwgYiA8PCAifVxuIjsKCQlzdHIgPSBzdHJlYW0uc3RyKCk7Cgl9Cn07CgppbnQgbWFpbigpIHsKICAgIEZvbyB0MSA9IEJhcigxMCwxMCk7CiAgICBCYXIgdDIgPSBCYXIoMjAsMjApOwogICAgRm9vICp0MyA9IG5ldyBCYXIoMzAsMzApOwogICAgRm9vIHQ0ID0gQmFyKDEwLCAyMCk7CiAgICB0MS5wcmludCgpOwogICAgdDIucHJpbnQoKTsKICAgIHQzLT5wcmludCgpOwogICAgdDQucHJpbnQoKTsKICAgIGRlbGV0ZSB0MzsKICAgIHJldHVybiAwOwp9