Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类接口功能_C++ - Fatal编程技术网

C++ 类接口功能

C++ 类接口功能,c++,C++,如果我有以下代码: 我有哪些选项可以从B_接口指针运行class A成员函数 我知道B_接口可以继承A_接口,如下所示: B_类接口:虚拟公共A_接口 但就我所知,使用GMOCK模拟B类是不可能的。我有什么选择 谢谢…内部B类\u接口有: void i_am_a() { // throws if the object does not actually have A as a base dynamic_cast<A &>(*this).i_am_a();

如果我有以下代码:

我有哪些选项可以从B_接口指针运行class A成员函数

我知道B_接口可以继承A_接口,如下所示:

B_类接口:虚拟公共A_接口

但就我所知,使用GMOCK模拟B类是不可能的。我有什么选择


谢谢…

内部
B类\u接口
有:

void i_am_a()
{
     // throws if the object does not actually have A as a base
     dynamic_cast<A &>(*this).i_am_a();
}
void i\u am\u a()
{
//如果对象实际上没有作为基础的
动态施法(*此)。我是一个();
}
好的,我又错了:(。下面是答案代码:

class A_Interface {
 public:
    virtual void i_am_a() = 0;
};

class A : virtual public A_Interface {
 public:
    void i_am_a() {printf("This is A\n");}
};

class B_Interface : virtual public A_Interface {
 public:
    virtual void i_am_b() = 0;
    // would like to run i_am_a()
};

class B : public A, public B_interface {
 public:
    void i_am_b() {printf("This is B\n");}
};
class MockB : public B_Interface, public MockA {
    MOCK_METHOD0(foo, int(int));
}
GMock可以是这样的:

class A_Interface {
 public:
    virtual void i_am_a() = 0;
};

class A : virtual public A_Interface {
 public:
    void i_am_a() {printf("This is A\n");}
};

class B_Interface : virtual public A_Interface {
 public:
    virtual void i_am_b() = 0;
    // would like to run i_am_a()
};

class B : public A, public B_interface {
 public:
    void i_am_b() {printf("This is B\n");}
};
class MockB : public B_Interface, public MockA {
    MOCK_METHOD0(foo, int(int));
}

这在实际应用中为我工作,但似乎有点混乱。

如果GMOCK(是谷歌模型?)和你所说的一样有限,你可以很幸运地发现这一点,然后继续前进。不要让测试助手工具决定你的代码的结构。我错了,GMOCK可以处理这个……乱七八糟的格式化和拼写错误。
class MockB : public B_Interface, public MockA {
    MOCK_METHOD0(foo, int(int));
}