class Base1{
    public:
        Base1(){};
        virtual ~Base1() = 0;
}
class Derived1 : public Base1{
    public:
        Derived1(int a) : a(a){};
        ~Derived1();
        int a;
}
class Base2{
    public:
        Base2(){};
        virtual ~Base2() = 0;
}
class Derived2 : public Base2{
    public:
        Derived2(int b) : b(b){};
        ~Derived2();
        int b;
        void func(const Base1 &base1); // How to access Derived1::a here?
}
Given the above class definition, how can I access Derived1::a in void func(const Base1 &base1)? I am still new to polymorphism. I tried to use different static_cast or dynamic_cast methods but none of them works. What should I do inside the function so I can access a derived class member from a base class reference?
FYI I can't change the class definition for my coursework requirement, and that is what given to me. I understand that it is simpler to just pass Derived1 as parameter but I am not allow to do so.
 
    