我正在用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()的情况下访问它?
答案 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()
。