2016-06-20 1 views
0
#include<iostream> 
using namespace std; 

class one 
{ 
    public: 
     int datam; 
     void show() 
     { 
      cout<<datam; 
     } 
}; 

void addv(one par) 
{ 
    par.datam=2; 
} 

int main() 
{ 
    one w; 
    addv(w); 
    w.show(); 

    return 0; 
} 

コンパイル後、これはガベージ値を与えます。オブジェクトwdatamember(datam)を初期化できないのはなぜですか? 私は初期化する他の方法があることを知っていますが、この方法の問題点は何ですか?オブジェクトをパラメータとして渡してオブジェクトのデータメンバーを初期化できません

+2

間違いなくどこかでは駄目ですが、私はそれを見つけることができません。実際には、値渡しと参照渡しの違いを探しています – Tas

+1

値がオブジェクト 'w' **を渡しているので、コピーに実際に新しい値が割り当てられます。 。 –

答えて

1

参照によって何も渡していません。参照を渡すには、関数をvoid addv(one &par)と宣言する必要があります。したがって、コピーを渡して、関数が返る前に破棄されるコピーを初期化しています。

3

referenceを渡す必要があります。 、あなたのコードでは

void addv(one &par) 
//------------^^^^ 

、あなたが原因これに値(及びません参照)で渡している:私のように機能addv()のプロトタイプを変更した

#include<iostream> 
using namespace std; 

class one 
{ 
    public: 
     int datam; 
     void show() 
     { 
      cout<<datam; 
     } 
}; 

void addv(one &par) 
{ 
    par.datam=5; 
} 

int main() 
{ 
    one w; 
    addv(w); 
    w.show(); 

    return 0; 
} 

注:以下の変更されたコードを参照してください。ごみの価値が得られます。作業コードhere

関連する問題