2016-12-07 9 views
2

私はSocketTestから派生したクラスUDPSocketTestを持っています。 SocketTestには、そのコンストラクタにパラメータが必要です。そのためgtestフレームワークを使用してのC++でこのパターンを実装する方法は?

UDPSocketTestは、パラメータなしのコンストラクタを持つ必要がある、だから私はUDPSocketTestのコンストラクタで、それを作成したい、とSocketTestに渡すと思います。

問題は、基本クラスがC++標準でメンバーよりも前に初期化されることです。

class UDPSocketTest : public SocketTest 
{    
public:   
    UDPSocketTest() 
     socketPool_(new SocketPool()), <<---- Line 1 
     SocketTest(socketPool_) {  <<---- Line 2 
    }       

    ~UDPSocketTest() { 
    }   

private: 
    SocketPool* socketPool_; 
}; 

しかし、行1の前に行2を呼び出す必要があります。これを実装する方法はありますか。

class UDPSocketTest : public SocketTest 
{    
public:   
    UDPSocketTest() : UDPSocketTest(new SocketPool()) {} 

    // You should already have this constructor written: 
    UDPSocketTest(SockerPool *p) 
     SocketTest(p), 
     socketPool_(p) 
    { 
    }       

    ~UDPSocketTest() { 
    }   

private: 
    SocketPool* socketPool_; 
}; 

最小抵抗のパスは次のとおり

答えて

3

は委譲コンストラクタ(C++ 11)を使用します。 C++ 11の前には、socketPool_を最初から継承した基本クラスに移動する必要があります。したがって、初期化順序の最初のものになります。

関連する問題