#include #include #include using namespace std; class Base { public: Base(int x) : x_(x) { } virtual string toString() { return string("Base: x_ =") + std::to_string(x_); } int x_; }; class Subclass : public Base { public: Subclass(int y) : Base(16), y_(y) { } string toString() override { return string("Subclass: y_ = ") + std::to_string(y_) + " x_ = " + std::to_string(x_); } int y_; }; int main(int argc, char *argv[]) { shared_ptr b(new Base(1)); cout << "b = " << b->toString() << endl; shared_ptr d(new Subclass(2)); cout << "d = " << d->toString() << endl; b = d; cout << "b = " << b->toString() << endl; }