2017-07-20 51 views
0

在下面的代碼中,我期望得到5的輸出,但是我得到了任意的垃圾。爲什麼x沒有被設置爲5?當我聲明派生類對象並將x的值設置爲5時,不會調用構造函數嗎?如何將參數傳遞給C++中的基類構造函數

#include <iostream> 


using namespace std; 

class Base{ 

public: 
    int x; 
    Base(){ 
    } 
    Base(int arg) 
    { 
     x = arg; 
    } 
}; 

class Derived: public Base{ 
public: 
    Derived():Base(5){ 
    } 

}; 

int main() { 


    Base obj2; 
Derived obj1; 
    cout << obj2.x; 

    return 0; 
} 
+0

這篇文章爲什麼會被降低投票率?我需要知道,所以我可以寫更好的問題! –

+0

如果你將鼠標懸停在downvote附近的問題上,你可以看到它的原因是「不顯示任何研究工作」。 –

+0

@SaubhagyaSrivastava謝謝。在我問之前,我確實已經努力研究這個問題。我下次可以做什麼來證明我已經投入了這一努力? –

回答

1

在你的榜樣,你不傳遞任何值給obj2構造,所以你x成員保持未初始化。

請記住obj1obj2不共享任何成員,它們是單獨的斷開的實例。

+0

啊,謝謝。這真的清除了事情。我很感激。任何想法爲什麼這個職位downvoted?我需要知道,所以我可以寫更好的問題 –

+0

我從來沒有想出這些downvoters的想法。我希望他們能評論他們爲什麼低估。 –

0

Base默認構造函數不初始化x,它有沒有在一流的初始化,所以Base obj2;構建一個實例未初始化的x和未初始化的變量讀的未定義行爲。

相關問題