#include <iostream>
#include <boost/shared_ptr.hpp>
struct base {
int i;
explicit base(int i) : i(i) {}
virtual ~base() {}
virtual int id() const { return i; }
};
struct child : base {
explicit child(int i) : base(i) {}
virtual int id() const /*override*/ { return i + 1000; }
};
int main() {
boost::shared_ptr<base> p(new child(13));
std::cout << p->id() << std::endl; //=> 1013
std::cout << p->base::id() << std::endl; //=> 13
}