2012-10-19 42 views
2

我不明白爲什麼我的成員沒有初始化。我有這樣的事情:C++構造函數中超類的init成員

class A 
{ 
    public: 
    A() {member = 0;} 
    int getMember() {return member;} 
    protected: 
    int member; 
} 

class B : public A 
{ 
    public: 
    B() : A() {member = 10;} 
} 

當我嘗試從B檢查始終爲0 什麼我錯過這裏得到成員的價值?

謝謝!

編輯:Ctor現已公開。

+0

@克里斯檢查代碼:這仍然會構建'B'對象並且儘可能地將'10'分配給'member'。不過,如果不是的話,我想開悟。 –

+2

構造函數是私人的..所以我假設你不能有新的B(); 我有一段時間沒有做C++ ..所以我可能是錯的。 –

+8

@LewsTherin:你說得對。這指向發佈的代碼不是真正的代碼,在這種情況下,行爲可能來自引用示例中未顯示的方面。 –

回答

3

我想兩件事情,他們都給予了預期的結果:

class A 
{ 
    public: 
    A() {member = 0;} 
    int getMember() {return member;} 
    protected: 
    int member; 
}; 

class B : public A 
{ 
public: 
    B() : A() {member = 10;} 
}; 

int main() { 
    A* a = new B(); 
    cout << a->getMember() << endl; 
    B b; 
    cout << b.getMember() << endl; 
    return 0; 
} 

這將返回

output: 
10 
10 

您可以在http://ideone.com/FArIAC

+0

我真的不知道哪裏出了問題,但現在它工作。也許沒有從編譯器或任何更新。謝謝! – user1760653

+0

很高興它工作:) – alestanis

相關問題