#include <iostream>
#include <vector>
using namespace std;

class BaseClass{
public:
    int x;
public:
    BaseClass(){x = 0;}

    virtual istream& fromSerial(istream& stream){ return stream >> x; }
    virtual void print(){
     cout << "BaseClass::x = " <<  x << endl;
    }
    virtual ~BaseClass(){}
};

class SubClass1: public BaseClass{
public:
    int y;
public:
    SubClass1(){y = 0;}

   virtual istream& fromSerial(istream& stream){            
            BaseClass::fromSerial(stream); //read baseclass first
            return stream >> y;
    }
    virtual void print(){ 
     BaseClass::print();
     cout << "SubClass1::y = " << y << endl;
    }
};

BaseClass* createNewClass(BaseClass * temp)
{
    cout << "Input 2 values: ";
    temp->fromSerial(cin);
    return temp;
}

int main()
{
    vector<BaseClass*> db;
    db.push_back(createNewClass(new SubClass1));


    cout << "\nPrinting Data: " << endl;
    db[0]->print();
}