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