Manというクラスにupdateというメソッドがあります。私のmain.cppでは、次のように呼び出します。
int age=0;
Man person;
person.Update(age);
これにより、メソッド内の人の年齢が更新されます。ただし、メインファイルに戻ると、更新された経過時間はありません。したがって、変数はクラスメソッドで設定されますが、main.cppコンテキストには戻りません。
編集
Man::Update(int age)
{
age++;
}
Manというクラスにupdateというメソッドがあります。私のmain.cppでは、次のように呼び出します。
int age=0;
Man person;
person.Update(age);
これにより、メソッド内の人の年齢が更新されます。ただし、メインファイルに戻ると、更新された経過時間はありません。したがって、変数はクラスメソッドで設定されますが、main.cppコンテキストには戻りません。
Man::Update(int age)
{
age++;
}
変数の変更を呼び出し元のスコープに反映するには、変数への参照を関数に渡す必要があります。参照が渡されると、関数スコープ内の変数は、呼び出し元スコープ内の変数である/を効果的に参照します。
Man::Update(int &age) //The ampersand reflects that it is a reference
{
age++;
}
あなたがしていることは、価値の受け渡しと呼ばれています。この場合、変数の新しいコピーが関数スコープに作成され、加えられた変更は呼び出し元のスコープに反映されません。
詳細な説明はこちら、Q&Aスタイルの説明はこちらをご覧ください。
ただし、この特定のケースで実行していることは、クラスまたはメンバー関数をまったく必要としません。これは、単一の通常の機能を使用して実行できます。
void Man::Update(int & age)
{
age++;
}
動作するはずです
age
引数を値で渡します。これは、関数にコピーされ、Update
そのコピーが変更されることを意味します。引数を参照で渡す必要があります。これは、参照型を提供するため、C++で簡単に実行できます。参照型の名前は、バインドされているオブジェクトのエイリアスとして機能します。&
タイプにアンパサンド()を追加するだけです。
void Man::Update(int& age)
{
age++;
}
あなたがそうするとき、あなたはあなたの関数の参照にperson.Update(age);
オブジェクトをバインドしています。age
age
他の人は、ポインタを使用する別の方法を提供するかもしれません(int*
引数を取り、関数に渡し&age
ます)。これはCで行われる方法ですが、Cを書いているわけではありません。彼らにだまされてはいけません。参照型を使用する方が、ポインターを使用するよりも安全で表現力に優れています。
ただし、なぜあなたがというクラスを持っていて、のメンバーではないのMan
か疑問に思います。クラスは、関連データをオブジェクトとして一緒に保存する方法です。年齢は男性を表すデータの一部だと思います。age
Man