C でのデフォルト引数としてのメンバー変数の使用
C では、メンバー関数の引数をオプションにする必要がある場合があります。引数を指定しない場合は、メンバー変数をデフォルトとして使用することをお勧めします。
次の例を考えてみましょう。
class Object { ... void MoveTo(double speed, Point position); protected: Point initPos; Point currPos; };
コードは、メンバー変数 initPos をMoveTo 関数の位置パラメータのデフォルト値:
void Object::MoveTo(double speed, Point position = initPos) { currPos = postion; }
ただし、このアプローチではコンパイルが発生します。 error:
error: invalid use of non-static data member 'Object::initPos'
問題は、メンバー関数のデフォルトの引数式がクラスまたはグローバル スコープ要素のみに依存する必要があることです。さらに、ヘッダー ファイル内のメソッドの宣言でデフォルトの引数を定義する必要があります。
これを解決するには、MoveTo メソッドの 2 つのオーバーロードを作成できます。
void Object::MoveTo(double speed) { MoveTo(speed, initPos); } void Object::MoveTo(double speed, Point position) { // Implementation here. }
MoveTo メソッド1 つの引数を受け取ると、2 つの引数を指定して MoveTo メソッドを呼び出し、デフォルトとして initPos 値を渡します。
Object object; object.MoveTo(10.0); // Calls MoveTo(10.0, initPos)
このアプローチは次のとおりです。 MoveTo の実装を 1 回だけ定義できるようにすることで、DRY 原則に準拠します。
以上がC メンバー関数のデフォルト引数としてメンバー変数を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。