ホームページ >バックエンド開発 >C++ >C メンバー関数のデフォルト引数としてメンバー変数を使用するにはどうすればよいですか?

C メンバー関数のデフォルト引数としてメンバー変数を使用するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-11 08:58:03685ブラウズ

How Can You Use Member Variables as Default Arguments in C   Member Functions?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。