访问实现不属于Interface的Interface的类的函数

时间:2011-08-05 15:33:12

标签: c++ unit-testing abstract-class pure-virtual

我正在用c ++编写应用程序。 我有一个定义了各种功能的接口:

class ITest
{
public:
        virtual void x()=0;
        virtual void y()=0;
}

然后我有一个实现此接口的类以及其他函数:

class NewClass: public ITest
{
public:
    virtual void x();
    virtual void y();
    // new function not defined in interface
    virtual void z();
}

我现在想从单元测试中访问所有这三个函数。 目前我正在使用:

ITest* pTest;

只允许我访问界面中定义的2个函数。 如何在不在界面中定义函数z()的情况下访问它?

3 个答案:

答案 0 :(得分:3)

NewClass* p = dynamic_cast<NewClass*>(pTest);
if(p==0)
{
   //error!!! pTest's dynamic type wasn't NewClass*
}
else
{
   p->z();
}

您可以使用dynamic_cast而不是static_cast。但如果pTest的动态类型实际上不是NewClass*,那么您将获得未定义的行为。

答案 1 :(得分:0)

使用NewClass *或如果是一个则转换为一个。

答案 2 :(得分:0)

由于它是单元测试,因此您可以控制创建类的行。

现在不要这样做:

ITest* pTest = new NewClass();

但是:

NewClass* pTest = new NewClass();

您可以毫无问题地使用pTest->z()