2016-06-02 2 views
1
#include<iostream> 
using namespace std; 

class A 
{ 
protected: 
    int m_nValue; 
public: 
    A(int nValue):m_nValue(nValue) 
    { 
     cout << m_nValue << endl; 
    } 
}; 
class B: public A 
{ 
public: 
    B(int nValue): A(m_nValue) 
    { 
     cout << m_nValue << endl; 
    } 
    int getValue() 
    { 
     return m_nValue; 
    } 
}; 
int main() 
{ 
    B b(4); 
    cout << b.getValue() << endl; 
    return 0; 
} 

ここで、上記のプログラムでは、派生クラスでm_nValueを再度宣言していません。出力では、値 "4"を表示するのではなく、ジャンク値のみが表示されています。 これを説明してください。派生クラスは基本クラスと同じメンバ変数名を持っています

答えて

2
B(int nValue): A(nValue) 

あなたはnValueAを初期化する必要があるのではなくm_nValue

2

あなたのコンストラクタはB(int nValue): A(m_nValue)盗聴されています。 Aコンストラクタに渡すのにnValueを使用していませんが、インスタンス変数は初期化されていません。

+0

は、オハイオ州のがらくたをお勧めします!どのように私はこれを見ることができないかもしれない!とにかくたくさんありがとうございました – rad123

3

m_nValuem_nValueと初期化しようとしています。パラメータnValue(値は4に渡されます)はまったく使用されません。そのため、m_nValueにはガベージ値しかないのです。

あなたは

B(int nValue): A(nValue) 
{ 
    cout << m_nValue << endl; 
} 
関連する問題