2016-12-07 27 views
2

我有一個類UDPSocketTest,它來自SocketTestSocketTest在它的構造函數中需要一個參數。如何在C++中實現這個模式?

由於使用gtest框架,UDPSocketTest需要有不帶參數的構造函數,所以我想在UDPSocketTest構造函數來創建它,並將它傳遞給SocketTest

問題是基類是在C++標準成員之前初始化的。

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

    ~UDPSocketTest() { 
    }   

private: 
    SocketPool* socketPool_; 
}; 

但第2行應該在第1行之前調用。所以任何方式來實現這個?

回答

3

使用委託構造(C++ 11):

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_; 
}; 

這是阻力最小的路徑。在C++ 11之前,您必須將socketPool_移動到一個從第一個繼承的基類中,因此它將成爲初始化順序中的第一個。