Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c++ polymorphism from multiple classes

Is there anyway to do a type of "stacking inheritance" where you replace potentially multiple functions of a base class based on other calls?

for example something like:

class Base {
      void func1(){/* do something */}
      void func2(){/* do something */}
};
class A1 {
      void func1(){/* do something else */}
};
class A2 {
      void func2(){/* do something else */}
};

int main(){
   A1 a1obj = new A1();
   A2 a2obj = new A2();
   Base obj = new Base();

   obj = &a1obj;
   obj = &a2obj;
   obj.func1(); //now A1::func1()
   obj.func2(); //now A2::func2()
}

Thank you

like image 913
Cameron Long Avatar asked Jun 04 '26 06:06

Cameron Long


1 Answers

There are virtual functions and multiple inheritance (which should be avoided if possible) in C++.

What you could do in this case is:

class Base {
      virtual void func1(){/* do something */}
      virtual void func2(){/* do something */}
};
class A1: public Base {
      void func1() override {/* do something else */}
};
class A2: public A1 {
      void func2() override {/* do something else */}
};

int main(){
   A2 a2obj;
   Base* obj = &a2obj;

   obj->func1(); //now A1::func1()
   obj->func2(); //now A2::func2()
}

you could even skip instantiating the Base object and just do

int main(){
   A2 obj;

   obj.func1(); //now A1::func1()
   obj.func2(); //now A2::func2()
}
like image 170
George Hanna Avatar answered Jun 06 '26 20:06

George Hanna



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!