1

私は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();
}

単体テストからこれら 3 つの関数すべてにアクセスしたいと考えています。現在私は使用しています:

ITest* pTest;

インターフェイスで定義された 2 つの関数にのみアクセスできます。インターフェイスで定義せずに関数 z() にアクセスするにはどうすればよいですか?

4

3 に答える 3

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*場合、未定義の動作が発生します。

于 2011-08-05T15:36:34.100 に答える
0

NewClass* を使用するか、1 つである場合は 1 つにキャストします。

于 2011-08-05T15:37:56.567 に答える
0

単体テストなので、クラスを作成する行を制御します。

今はしないでください:

ITest* pTest = new NewClass();

ただし、次のことを行います。

NewClass* pTest = new NewClass();

で、問題なく使えますpTest->z()

于 2011-08-05T15:39:24.487 に答える