2011-08-05 9 views
1

私はC++でアプリケーションを作成しています。私は今からこれらの3つの機能のすべてにアクセスしたいインタフェースを実装しているクラスの、インタフェースに含まれていない関数へのアクセス

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

:私はその後、追加機能と一緒に、このインタフェースを実装するクラスを持っている

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

: 私は様々な機能で定義されたインタフェースを持っています私のユニットテスト。 現在、私が使用しています:

ITest* pTest; 

私だけのインターフェイスで定義された2つの機能へのアクセス権を与えるであろう。 関数z()をインターフェイスで定義せずにアクセスするにはどうすればよいですか?

+0

インタフェースタイプのオブジェクトへのポインタを介してインタフェースに定義されていない関数にアクセスしてからインターフェイスを使用する目的を無効にしている可能性があります。 – AlefSin

答えて

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

+0

または、コンパイル時のチェックを提供するpolymorphic_downcast .. – StevieG

0

NewClass *を使用するか、NewClass *の場合はそれにキャストします。

0

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

ITest* pTest = new NewClass(); 

を行うが、:

は今行いません

NewClass* pTest = new NewClass(); 

、あなたは問題なくpTest->z()を使用することができます。

関連する問題