来自多个类的 C++ 多态性

标签 c++ inheritance polymorphism multiple-inheritance

是否有一种“堆叠继承”,您可以根据其他调用替换基类的潜在多个函数?

例如:

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

您甚至可以跳过实例化 Base 对象而直接执行

int main(){
   A2 obj;

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

关于来自多个类的 C++ 多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45939686/

相关文章:

c++ - 如何动态包含makefile

C# public class where T : class, Class, new() 混淆

java - Hibernate @Where 注释不适用于继承

Java参数签名解析

C++ 将 RAII 与多态性和堆栈分配结合使用

Java - 向上转换 ArrayList 层次结构

c++ - 在 CLion 中调试时如何切换到 cmd/powershell?

c++ - 有没有一种方法可以更有效地选择特定变量?

带有模板的 C++ Clang 优化错误

c++ - 多态性和函数重载?