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

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

DDD
DDDオリジナル
2024-11-14 17:00:02948ブラウズ

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 までご連絡ください。