2016-11-16 7 views
2
#include<iostream> 
using namespace std; 
class Alpha 
{ 
    int a; 
public: 
    void get_a(int x) 
    { 
     a = x; 
    } 
    int hello() 
    { 
     return a; 
    } 
}; 
class Beta : public Alpha 
{ 
    int b, c; 
public: 
    void get_b(int y) 
    { 
     b = y; 
    } 
    void add() 
    { 
     c = hello() + b; 
     cout << c << endl; // displays garbage value 
    } 
}; 
int main() 
{ 
    Alpha v1; 
    Beta v2; 
    v1.get_a(4); 
    v2.get_b(3); 
    v2.add(); 
    v2.disp(); 
    return 0; 
} 

v2.dispの出力は、()ごみの値を示しているが、私はinitaliseとき「」ではなくv1.get_aのv2.get_aとして、それが正しい答えを示しています。 C++の新機能btw。助けてください。ありがとう。C++、単一継承、ごみ値

+1

あなたの問題を解決するには、オブジェクトを使用するのですか?私はあなたのコードでそれが表示されません。 –

+1

また、あなたの命名は少し奇妙です。 'get'という名前の関数があり、実際には何も取得せず、代わりに* set *値を取得します。 –

+0

申し訳ありません、dispは実際には変数cの値を表示するための関数でした。私はコードを編集していたので、追加するのを忘れました。しかし、変数aを既に初期化していれば、なぜガベージ値が表示されるのですか?もう一度ありがとう。 – user7166135

答えて

2

問題は、お互いに無関係の2つの異なるオブジェクトがあることです。オブジェクトv1は、オブジェクトv2とは無関係です。オブジェクトは別々のオブジェクトです。 Alpha::av1.get_a(4)で初期化すると、Beta::aは初期化されません。 `disp`は何ですか

Beta v; 
v.get_a(4); 
v.get_b(3); 
v.add(); 
v.disp(); 
+0

申し訳ありません。ありがとう、たくさんの兄弟。 :) – user7166135

関連する問題