2015-10-13 14 views
-1

如果object是整個類的實例,爲什麼我們不能從單個對象調用參數化和非參數化構造函數。如何從C++中的單個對象調用參數化和非參數化構造函數

class ovrldng { 
public: 
    int var; 
    ovrldng() { 
     var=101; 
     cout << "Default constructor assigned value into var=" << var ; 
    } 

    ovrldng(int x) { 
     var=x; 
     cout << "Parametrized assign 'x' value to var =" << var ; 
    } 
}; 

從主如何調用從一個對象兩個構造;

+1

一個對象只能構造一次。 – NathanOliver

+0

在C++ 11之前,你不能使用構造函數代理 –

回答

1

我會建議你使用調用構造函數(帶參數)的構造函數(不帶參數),也被稱爲構造代表團:

ovrldng() : ovrldng(101) 
{ 
    cout << "Default constructor assigned value into var=" << var ; 
} 

ovrldng(int x) : var(x) 
{ 
    cout << "Parametrized assign 'x' value to var =" << var ; 
} 

,並在主,你可以同時調用構造函數只創建一個對象:

int main() 
{ 
    ovrldng obj; 
} 

希望這是你正在尋找的東西。

+1

「在構造函數中調用構造函數」,這就是所謂的構造函數代理 – Slava

1

有多種方式通過多個構造函數初始化對象。

哪一個使用它取決於個人偏好/編碼指南,用例(可能構造函數不同以共享代碼)和技術限制(例如,編譯器不支持C++ 11功能):

#include <iostream> 

//Your current solution (works pre C++11) 
class ovrldng_1 { 
public: 
    int var; 
    ovrldng_1() { 
     var = 101; 
     std::cout << "ovrldng_1 var =" << var << std::endl; 
    } 

    ovrldng_1(int x) { 
     var = x; 
     std::cout << "ovrldng_1 var =" << var << std::endl; 
    } 
}; 


//Using a function to initialize (works pre C++11) 
class ovrldng_2 { 
public: 
    int var; 
    ovrldng_2() { 
     init(101); 
    } 

    ovrldng_2(int x) { 
     init(x); 
    } 

    void init(int x){ 
     var = x; 
     std::cout << "ovrldng_2 var =" << var << std::endl; 
    } 
}; 


//Using a default value (works pre C++11) 
class ovrldng_3 { 
public: 
    int var; 
    ovrldng_3(int x=101) { 
     var = x; 
     std::cout << "ovrldng_3 var =" << var << std::endl; 
    } 
}; 


//Calling one constructor from another (constructor delegation) (C++11 is required) 
class ovrldng_4 { 
public: 
    int var; 
    ovrldng_4(int x) { 
     var = x; 
     std::cout << "ovrldng_4 var =" << var << std::endl; 
    } 

    ovrldng_4() : ovrldng_4(101){} 
}; 

爲了測試這些可以只創建每一類型的對象(和與每一個定義的構造函數),並檢查該輸出:

int main(int argc, char* argv[]) 
{ 
    ovrldng_1 a; 
    ovrldng_1 b(212); 
    ovrldng_2 c; 
    ovrldng_2 d(212); 
    ovrldng_3 e; 
    ovrldng_3 f(212); 
    ovrldng_4 g; 
    ovrldng_4 h(212); 
    return 0; 
} 

輸出:

ovrldng_1 var = 101 
ovrldng_1 var = 212 
ovrldng_2 var = 101 
ovrldng_2 var = 212 
ovrldng_3 var = 101 
ovrldng_3 var = 212 
ovrldng_4 var = 101 
ovrldng_4 var = 212 

附錄 您應該使用初始值設定項列表(請參閱https://isocpp.org/wiki/faq/ctors#init-lists)。 我只是沒有使用它們來使不同的類更容易比較。

+0

先生,我想知道如何從單個對象調用參數化和非參數化構造函數。爲什麼? 如果對象擁有所有類的東西.. !! –

+0

簡答:不可能。你爲什麼不更新你的問題,並解釋你爲什麼要這樣做。 –

+0

謝謝先生..我只是想知道對象指向的內存結構。 它與任何項目或東西都沒有關係。我剛開始學習cpp ..這是好奇心的結果 –

相關問題