2016-04-06 52 views
0

以下是一個製作的示例,但是代表我正在處理的代碼示例。如何在這個類中調用構造函數。

我們如何在這裏調用類test的構造函數?

class Test 
{ 
public: 
    Test(vector<double>* pt) 
    { 
    ptv = pt; 
    } 
    vector<double>* ptv; 

}; 



class container 
{ 

public: 
    container(double a, double b) 
    { 
    v.push_back(a); 
    v.push_back(b); 
    // How to call the construtor of ct_ptv here? 
    } 
    vector<double> v; 
    Test  ct_ptv; 
}; 

換言之,我有兩個類。其中一個被稱爲容器,其實例化 包含大小爲2的向量。相同的 類也將具有名爲Test的類,其將包含指向矢量v的指針 。

如何在這裏調用ct_ptv的構造函數?

+2

_' //如何在這裏呼籲ct_ptv的construtor? '_你不能(不能)在構造函數體中調用它,但需要在成員初始值設定項列表中初始化它。 –

回答

1
class container 
{ 
public: 
    container(double a, double b) : 
     v({ a, b }), 
     ct_ptv(&v) 
    { 
    } 
    vector<double> v; 
    Test ct_ptv; 
}; 
+0

有時,當您從初始化程序列表中引用成員時,您會收到警告。當我將一些指針傳遞給基類時,我有這個。檢查兩次,然後再忽略警告。 – BitTickler

+0

請注意,'v({a,b})'語法僅在C++ 11及更高版本中可用。在C++ 11之前,你必須堅持在構造函數體中調用'v.push_back()'。不過,您仍然可以在構造函數的初始化列表中初始化'ct_ptv'。 –

+0

@BitTickler你所指的警告可能是在初始化之前使用成員變量。如果在此示例中(在類定義中,不在初始化程序列表中)切換了'v'和'ct_ptv',則會顯示該警告。數據成員總是按照它們在類定義中出現的順序進行初始化。 – Kevin

0
class container 
{ 
public: 
    container(double a, double b) 
     : ct_ptv(&v) 
    { 
    v.push_back(a); 
    v.push_back(b); 
    } 
    vector<double> v; 
    Test  ct_ptv; 
}; 
相關問題