2017-04-15 14 views
-1

によってオブジェクトを渡す(私は私が探していた答えを見つけられませんでしたが、私は将来的にそれを持っていることが他の誰かのために自分の質問に答える試してみたいので、私は私の自己をそれを把握)参照

オブジェクトをクラス以外の関数に渡してデータを変更するにはどうすればよいですか? たとえば

クラスFoo {}にはprivate int x = 5というクラスがあり、このクラスからchangeValue関数を直接入力せずに10に変更したいが、この関数を呼び出す非クラス関数を使用する。

答えて

0

だからあなたのコードは次のようなものに見える場合:

class Foo { 
public: 
    void changeValue(int val) { x = val; } 
private: 
    int x; 
} 

をそして、あなたは、changeValue方法外のxを変更したいあなたがする必要があるすべてはあなたがに友人としてそれを変更する機能を追加することですFooクラス。したがって、たとえば、仕事への本のために:

void g(Foo& foo) { 
    foo.x = 10; 
} 

あなたのFooクラスに次の行を追加する必要があります。

友人がプライベートメンバーにアクセスするには、その関数/クラスを可能にするように、クラス内部の何かを宣言
friend void g(Foo& foo); 

をおよび方法。

+0

私は、これは私のために働く、それが正しいかどうかわからない、あなたはそれをチェックできますか? – Christina

+0

あなたの解決策を見ても、それがうまくいくかどうかわかりません。もし私が正しいのであれば、test2を作成するときにchangeVal関数内にコピーが作成されるので、test2.change(num)はテスト内で何も変更しません。 –

+0

あなたが非公開として宣言するとき、あなたはそれがアクセス可能であることを決める方法の外でアクセス可能ではありません(つまり、外部としての機能を友人として宣言します)。 –

-1

我々は

class Foo{ 
private: 
    int x; 
public: 
    change(int y){ 
     x = y; 
    } 
} 

を持っていると我々は我々がchangeVal関数のアドレスを与える機能

void changeVal(Foo test, int num); 

ではなく

Foo::change(int y); 

のXを変更したいとしましょうオブジェクト

int main(){ 
    Foo test; 
    changeVal(&test, 5); 
} 

その後、我々はchangeValを作成し、当社オリジナルのオブジェクト

void changeVal(Foo* test, int num){ 
    ... 
} 

、我々は、元のオブジェクトの値を取るために第三の目的を作成する必要があり、体内でのアドレスを保持するポインタオブジェクトを作成しようとしています"Foo *テスト"に保存した住所を元の住所に変更してコピーの代わりに元の住所を変更する

void changeVal(Foo* test, int num){ 
    Foo test2 = &test; 
    test2.change(num); 
} 
+0

これは、完全な答えではないかと疑問がはっきりしているようです。しかし、あなたが求めていることはまだはっきりしていません。おそらく、 この質問を削除し、すべてを新しいものに(作業コードで)収集し、あなたが確信している部分を強調表示します。 – Potatoswatter

関連する問題

 関連する問題