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

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

Patricia Arquette
リリース: 2024-11-11 08:58:03
オリジナル
705 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート