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

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

    friend istream& operator>>(istream& stream, BaseClass &a){ stream >> a.x; return stream; }
    friend ostream& operator<<(ostream& stream, BaseClass const &a)
        { stream << "X = " << a.x << endl; return stream; }
    void print(){ cout << x; }
};

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

    friend istream& operator>>(istream& stream, SubClass1 &b)
        {
            cout << "hit" << endl;
            stream >> dynamic_cast<BaseClass&>(b);

            //WON'T RUN THIS PART OF CODE __________________________
            stream >> b.y;
        }
    friend ostream& operator<<(ostream& stream, SubClass1 const &b)
        { stream << "y = " << b.y << endl; return stream; }

    void print(){ cout << y; }
};

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

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


    cout << "\nPrinting Data: " << endl;
    cout << *db[0] << endl;
}