2016-03-28 3 views
1

このような基本的な質問を投稿することをお詫び申し上げますが、なぜこれが機能しないのか、それをどのように動作させるのかについてまともな答えを見つけることはできません。C++:関数からクラスメンバー値を変更する

私はここに私の問題を単純化しています

#include <iostream> 
using namespace std; 

class A { 
public: 
int x; 
}; 

void otherFunction() { 
A A; 
cout<<"X: "<<A.x<<endl; 
} 

int main(){ 
A A; 
A.x = 5; 
otherFunction(); 

return 0; 
} 

は、クラスのメンバーは、構成した後、一定になるのですか?

クラスに加えられた変更の範囲をどのように拡大できますか?

このように構造体が制限されていますか?

回答ありがとうございます。

+1

なぜそれが動作しないのかについての答えと理由をありがとう。今働いている –

答えて

0

これはやりたいことです。 関数otherFunctionの中に新しいオブジェクトAを作成すると、この新しいオブジェクトは関数のローカルになります。 メインの関数otherFunctionの呼び出しの後にA.xの値を表示すると、A.xの値が変更されたことがわかります。

0

Amainは、AotherFunctionと同じではないため、同じ値ではありません。

otherFunctionに、メインでAの値にアクセスする方法の1つは、パラメータとして渡すことです。例:

void otherFunction(A p) { 
    cout<<"X: "<<p.x<<endl; 
} 

int main(){ 
    A a; 
    a.x = 5; 
    otherFunction(a); 

    return 0; 
} 

変数の名前を変更してもう少し明確にしました。 aがメインで、コピーaotherFunctionに渡されます。そのコピーは、otherFunctionpと呼ばれます。あなたがそれをしたいならば、おそらくあなたよりも少し先になっているかもしれない参照によって渡す必要があります。otherFunctionpに変わることはありません。

3

otherFunction()では、前に値を割り当てていないタイプAの新しいオブジェクトを作成しているため、期待される出力が得られません!

より多くを学ぶためにC++で scope of a variable上に読む

は、下記のコードを実行してみてください、あなたは5

#include <iostream> 
using namespace std; 

class A { 
public: 
    int x; 
}; 

void otherFunction(A a) { 
    cout << "X: " << a.x << endl; 
} 

int main(){ 
    A a; 
    a.x = 5; 
    otherFunction(a); 

    return 0; 
} 

として出力を取得する必要があります別の方法としては、これを行うことができ、良いとされていますOOPでの練習

class A{ 
private: 
    int x; 
public: 
    void update(int newx){ 
     x = newx; 
    } 
    int getX(){ 
     return x; 
    } 
}; 

int main(){ 
    A a; 
    a.update(5); 
    cout << a.getX() << endl; 
    return 0; 
} 
関連する問題