fork download
  1. #include <string>
  2. #include <iostream>
  3. #include <memory>
  4.  
  5. class WenigDaten {
  6. public:
  7. virtual std::unique_ptr<WenigDaten> Copy () const {
  8. return std::make_unique<WenigDaten>(*this);
  9. }
  10. virtual std::string Name () const { return "WenigDaten"; };
  11. };
  12.  
  13. class BisselDaten : public WenigDaten {
  14. public:
  15. std::unique_ptr<WenigDaten> Copy () const override {
  16. return std::make_unique<BisselDaten>(*this);
  17. }
  18. std::string Name () const override { return "BisselDaten"; };
  19. };
  20.  
  21. int main ()
  22. {
  23. std::unique_ptr<WenigDaten> erstes = std::make_unique<BisselDaten>();
  24. const WenigDaten& erstes_ref = *erstes.get();
  25.  
  26. std::cout << "original: "<< erstes_ref.Name() << "\n";
  27.  
  28. auto zweites = erstes_ref;
  29. std::cout << "sliced: " << zweites.Name() << "\n";
  30.  
  31. auto drittes = erstes_ref.Copy();
  32. std::cout << "deep-copy: " << drittes->Name() << "\n";
  33.  
  34. auto viertes = static_cast<const BisselDaten&>(erstes_ref);
  35. std::cout << "copy: " << viertes.Name() << "\n";
  36.  
  37. return 0;
  38. }
Success #stdin #stdout 0s 5272KB
stdin
Standard input is empty
stdout
original: BisselDaten
sliced: WenigDaten
deep-copy: BisselDaten
copy: BisselDaten