2011-03-30 9 views
5

¿Puede una clase simulada heredar de otra clase simulada en googlemock? En caso afirmativo, ayúdeme a comprender por qué no funciona esto.¿Puede una clase simulada heredar de otra clase simulada en googlemock?

class IA 
{ 
public: 
    virtual int test1(int a) = 0; 
}; 

class IB : public IA 
{ 
public: 
    virtual float test2(float b) = 0; 
}; 

class MockA : public IA 
{ 
public: 
    MOCK_METHOD1(test1, int (int a)); 
}; 

class MockB : public MockA, public IB 
{ 
public: 
    MOCK_METHOD1(test2, float (float b)); 
}; 

me sale un error cannot instantiate abstract class compilador para MockB pero no para MockA

Respuesta

5

Si planea usar la herencia múltiple, debe usar la herencia virtual.

siguiente ejemplo compila y enlace fina:

class IA 
{ 
    public: 
     virtual int test1(int a) = 0; 
}; 

class IB : virtual public IA 
{ 
    public: 
     virtual float test2(float b) = 0; 
}; 

class MockA :virtual public IA 
{ 
    public: 
     int test1(int a) 
     { 
      return a+1; 
     } 
}; 

class MockB : public MockA, public IB 
{ 
    public: 
     float test2(float b) 
     { 
      return b+0.1; 
     } 
}; 

int main() 
{ 
    MockB b; 
    (void)b; 
} 

Es sólo una pequeña modificación de su ejemplo

2

Clase MockB hereda de IB que tiene dos funciones puramente abstractas: test1 y test2. Y debes anularlos a ambos. Heredar desde MockA que anula test1 es insuficiente (al menos en C++ - en Java funcionaría). Entonces, la solución es agregar

a MockB definición.

Cuestiones relacionadas