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

Linda Hamilton
リリース: 2024-11-10 10:23:02
オリジナル
639 人が閲覧しました

Why Can't I Use Member Variables as Default Arguments in C   Member Functions?

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

オブジェクト指向プログラミングでは、メンバー変数はメソッド引数のデフォルト値として機能することがよくあります。ただし、メンバー変数をデフォルトの引数として設定しようとすると、「非静的データ メンバーの無効な使用」などのエラーが発生する可能性があります。

問題の説明

引数が指定されていない場合はデフォルト値としてメンバー変数を使用し、メンバー関数の引数をオプションにすることを目的としています。ただし、コードでは「非静的データ メンバーの使用が無効です」というエラー メッセージが表示されます。コードに問題があると思われますが、解決策がわかりません。

コード スニペット

以下は、問題を説明するために提供されたコードです:

class Object {
public:
    void MoveTo(double speed, Point position);
protected:
    Point initPos; 
    Point currPos;
};

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

解決策

メンバー関数のデフォルトの引数式は、クラスまたはグローバル スコープ内の要素にのみ依存できます。さらに、デフォルトの引数はメソッドの宣言 (ヘッダー ファイル) で定義する必要があります。

これに対処するには、MoveTo メソッドの 2 つのオーバーロードを使用します。1 つは 1 つの引数を持ち、もう 1 つは 2 つの引数を持ちます。 1 つの引数を持つメソッドは、2 つの引数を持つメソッドを呼び出し、意図したデフォルト値を渡します。

void Object::MoveTo(double speed) {
    MoveTo(speed, initPos);
}

void Object::MoveTo(double speed, Point position) {
    // Implementation
}
ログイン後にコピー

MoveTo(double) を呼び出し、続いて MoveTo(double, Point) を呼び出すことにより、このテクニックを使用すると、次のことが可能になります。 DRY 原則 (自分自身を繰り返さない) に従って、MoveTo を 1 回だけ実装してください。

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

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