来自多个类别的C 多态性

c++ polymorphism from multiple classes

本文关键字:多态性      更新时间:2023-10-16

无论如何是否有一种"堆叠继承",您可以根据其他调用代替基类的多个功能?

例如:

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()
}

谢谢

在C 中有虚拟函数和多个继承(应避免使用)。

在这种情况下您可以做的是:

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()
}

您甚至可以跳过实例化基础对象,然后做

int main(){
   A2 obj;
   obj.func1(); //now A1::func1()
   obj.func2(); //now A2::func2()
}