模拟类可以从googlemock中的另一个模拟类继承吗?

发布于 2024-10-28 04:38:05 字数 489 浏览 1 评论 0原文

模拟类可以从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));
};

我收到 MockBcannot instantiate Abstract class 编译器错误,但 MockA 没有收到错误

Can a mock class inherit from another mock class in googlemock? If yes, then please help me in understanding why isn't this working.

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

I get a cannot instantiate abstract class compiler error for MockB but not for MockA

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱的十字路口 2024-11-04 04:38:05

如果您计划使用多重继承,则应该使用虚拟继承。

下一个示例编译并链接良好:

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;
}

这只是您的示例的一个小修改

If you plan on using multiple inheritance, you should be using virtual inheritance.

Next example compiles and link fine :

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;
}

It is just a small modification of your example

萌无敌 2024-11-04 04:38:05

MockB 类继承自 IB,它有两个纯抽象函数:test1test2。并且您需要覆盖它们。继承覆盖 test1MockA 是不够的(至少在 C++ 中 - 在 Java 中它可以工作)。因此解决方法是添加

virtual int test1(int a)
{
    return MockA::test1(a);
}

MockB 定义中。

Class MockB inherits from IB which has two purely abstract functions: test1 and test2. And you need to override both of them. Inheriting from MockA which overrides test1 is insufficient (at lest in C++ - in Java it would work). So the fix is to add

virtual int test1(int a)
{
    return MockA::test1(a);
}

to MockB definition.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文