ホームページ > バックエンド開発 > C++ > C メンバー関数でメンバー変数をデフォルトの引数として使用できないのはなぜですか?

C メンバー関数でメンバー変数をデフォルトの引数として使用できないのはなぜですか?

DDD
リリース: 2024-11-14 17:00:02
オリジナル
1056 人が閲覧しました

Why Can't a Member Variable Be Used as a Default Argument in a C   Member Function?

C でのデフォルト引数としてのメンバー変数の使用

C では、メンバーを使用してメンバー関数のデフォルト引数を指定できます。変数。ただし、メンバー関数をデフォルトの引数として使用しようとすると、以下の例に示すように、コンパイラ エラーが発生する可能性があります。

class Object {
protected:
   Point initPos;
   Point currPos;

   void MoveTo(double speed, Point position = initPos);
};

void Object::MoveTo(double speed, Point position) {
   currPos = postion;
}
ログイン後にコピー

このコードでは、次のコンパイル エラーが発生します:

error: invalid use of non-static data member 'Object::initPos'
ログイン後にコピー

エラーの理由

メンバー関数のデフォルトの引数式は、クラス内またはグローバル スコープでの要素の使用に制限されています。ここで、コンパイラは関数の呼び出し時に initPos メンバー変数の値を判断できず、エラーが発生します。

解決策

この問題を解決するには、関数を使用します。次のアプローチによるオーバーロード:

// Single-argument overload that defaults to initPos
void Object::MoveTo(double speed) {
   MoveTo(speed, initPos);
}

// Two-argument overload that takes the explicit position
void Object::MoveTo(double speed, Point position) {
   // Implementation here
}
ログイン後にコピー

利点

この手法により、単一メソッドでの実装を維持しながら、メンバー関数でのオプションの引数処理が可能になります。これは、デフォルト値を指定する便利な方法を提供しながら、コードの重複を回避することにより、DRY (Don't Reply Yourself) 原則に従っています。

以上がC メンバー関数でメンバー変数をデフォルトの引数として使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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