#include <iostream>
#include <memory>
class speziell {
struct allg {
virtual double get() =0;
};
struct einfach0 : allg {
double get() { return 0.0; }
};
struct interpoliert : allg {
interpoliert(double x) : x(x) {}
double x;
double get() { return x; }
};
std::unique_ptr<allg> data;
public:
speziell() : data(new einfach0) {}
speziell(double x) : data(new interpoliert(x)) {}
double get() { return data->get(); }
};
int main()
{
speziell a;
speziell b(4.0);
std::cout << a.get() << ' ' << b.get() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKY2xhc3Mgc3BlemllbGwgewogIHN0cnVjdCBhbGxnIHsKICAgIHZpcnR1YWwgZG91YmxlIGdldCgpID0wOwogIH07CiAgc3RydWN0IGVpbmZhY2gwIDogYWxsZyB7CiAgICBkb3VibGUgZ2V0KCkgeyByZXR1cm4gMC4wOyB9CiAgfTsKICBzdHJ1Y3QgaW50ZXJwb2xpZXJ0IDogYWxsZyB7CiAgICBpbnRlcnBvbGllcnQoZG91YmxlIHgpIDogeCh4KSB7fQogICAgZG91YmxlIHg7CiAgICBkb3VibGUgZ2V0KCkgeyByZXR1cm4geDsgfQogIH07CiAgc3RkOjp1bmlxdWVfcHRyPGFsbGc+IGRhdGE7CnB1YmxpYzoKICBzcGV6aWVsbCgpIDogZGF0YShuZXcgZWluZmFjaDApIHt9CiAgc3BlemllbGwoZG91YmxlIHgpIDogZGF0YShuZXcgaW50ZXJwb2xpZXJ0KHgpKSB7fQoKICBkb3VibGUgZ2V0KCkgeyByZXR1cm4gZGF0YS0+Z2V0KCk7IH0KfTsKCmludCBtYWluKCkKewogIHNwZXppZWxsIGE7CiAgc3BlemllbGwgYig0LjApOwoKICBzdGQ6OmNvdXQgPDwgYS5nZXQoKSA8PCAnICcgPDwgYi5nZXQoKSA8PCBzdGQ6OmVuZGw7Cn0K