#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;
}
