gpt4 book ai didi

c++ - 同一个函数在不同的时间调用不同的类

转载 作者:行者123 更新时间:2023-11-30 04:40:35 26 4
gpt4 key购买 nike

我只是想不出一种方法来调用具有通用性的函数。我有一个代码,必须在不同时刻调用两个不同类中的函数。

我有 A 类和 B 类,我可以访问一次或其他时间。或者我访问 A 或我访问 B。不是同一类型。

我编写了这个程序,但我无法想象如何做到这一点。或者这是否有利于性能或编码。我只想消除C类,但我不知道如何。

有什么想法吗?

class MyClass   {      public:         MyClass() {} //contructor padrão, não deve ser utilizado isoladamente          virtual int a() = 0;          virtual int b() = 0;          int c()        {            return b();        } };  class A : public MyClass  {      public:          int a() { return 1; }          int b() { return 1; }          int d() { return 1; }  };  class B : public MyClass  {      public:          int a() { return 1; }          int b() { return 1; }          int e() { return 1; }  };  class C {  public:      A ca;      B cb;      enum TIPO { A, B };      TIPO Tipo;      C(TIPO tipo) { Tipo = tipo; }      int a()      {          switch(Tipo)          {          case A:              return ca.a();              break;          case B:              return  cb.b();              break;          default:              break;          }      }  };  void main()  {      C c(C::B);      c.a();       return;  }  

最佳答案

如果我没理解错的话,你是在试图消除成员 (ca,cb),而只是调用适当的基类方法。

如果是这种情况,可以使用:

switch(Tipo) {
case A:
return A::a();
case B:
return B::a();
}

但是,我建议重新审视您的设计。通常,这种情况通常可以通过重新思考/重新设计类设计来处理,以便有一个定义 a() 的基类或接口(interface),而不是创建一个具有 2 个基类的具体类,而是创建两个特定的,从单个基类派生的具体类。这里不需要多重继承。 (这尤其正确,因为您在构建时就知道类型。)

关于c++ - 同一个函数在不同的时间调用不同的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1059432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com