#include <string>
#include <iostream>
#include <memory>
class WenigDaten {
public:
virtual std::unique_ptr<WenigDaten> Copy () const {
return std::make_unique<WenigDaten>(*this);
}
virtual std::string Name () const { return "WenigDaten"; };
};
class BisselDaten : public WenigDaten {
public:
std::unique_ptr<WenigDaten> Copy () const override {
return std::make_unique<BisselDaten>(*this);
}
std::string Name () const override { return "BisselDaten"; };
};
int main ()
{
std::unique_ptr<WenigDaten> erstes = std::make_unique<BisselDaten>();
const WenigDaten& erstes_ref = *erstes.get();
std::cout << "original: "<< erstes_ref.Name() << "\n";
auto zweites = erstes_ref;
std::cout << "sliced: " << zweites.Name() << "\n";
auto drittes = erstes_ref.Copy();
std::cout << "deep-copy: " << drittes->Name() << "\n";
auto viertes = static_cast<const BisselDaten&>(erstes_ref);
std::cout << "copy: " << viertes.Name() << "\n";
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKY2xhc3MgV2VuaWdEYXRlbiB7CnB1YmxpYzoKCXZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFdlbmlnRGF0ZW4+IENvcHkgKCkgY29uc3QgeyAKCQlyZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxXZW5pZ0RhdGVuPigqdGhpcyk7IAoJfQoJdmlydHVhbCBzdGQ6OnN0cmluZyBOYW1lICgpIGNvbnN0IHsgcmV0dXJuICJXZW5pZ0RhdGVuIjsgfTsKfTsKCmNsYXNzIEJpc3NlbERhdGVuIDogcHVibGljIFdlbmlnRGF0ZW4gewpwdWJsaWM6CglzdGQ6OnVuaXF1ZV9wdHI8V2VuaWdEYXRlbj4gQ29weSAoKSBjb25zdCBvdmVycmlkZSB7CgkJcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Qmlzc2VsRGF0ZW4+KCp0aGlzKTsKCX0KCXN0ZDo6c3RyaW5nIE5hbWUgKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIkJpc3NlbERhdGVuIjsgfTsKfTsKCmludCBtYWluICgpIAp7CglzdGQ6OnVuaXF1ZV9wdHI8V2VuaWdEYXRlbj4gZXJzdGVzID0gc3RkOjptYWtlX3VuaXF1ZTxCaXNzZWxEYXRlbj4oKTsKCWNvbnN0IFdlbmlnRGF0ZW4mIGVyc3Rlc19yZWYgPSAqZXJzdGVzLmdldCgpOwoJCglzdGQ6OmNvdXQgPDwgIm9yaWdpbmFsOiAiPDwgZXJzdGVzX3JlZi5OYW1lKCkgPDwgIlxuIjsKCQoJYXV0byB6d2VpdGVzID0gZXJzdGVzX3JlZjsKCXN0ZDo6Y291dCA8PCAic2xpY2VkOiAiIDw8IHp3ZWl0ZXMuTmFtZSgpIDw8ICJcbiI7ICAKCQoJYXV0byBkcml0dGVzID0gZXJzdGVzX3JlZi5Db3B5KCk7CglzdGQ6OmNvdXQgPDwgImRlZXAtY29weTogIiA8PCBkcml0dGVzLT5OYW1lKCkgPDwgIlxuIjsKCQoJYXV0byB2aWVydGVzID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmlzc2VsRGF0ZW4mPihlcnN0ZXNfcmVmKTsKCXN0ZDo6Y291dCA8PCAiY29weTogIiA8PCB2aWVydGVzLk5hbWUoKSA8PCAiXG4iOwoJCglyZXR1cm4gMDsKfQ==