C メソッドのデフォルト引数としてメンバー変数を使用できますか?

Mary-Kate Olsen
リリース: 2024-11-14 14:37:01
オリジナル
624 人が閲覧しました

Can I Use Member Variables as Default Arguments in C   Methods?

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

はじめに

複数の引数を取るメソッドを含むクラスを作成する場合、次のようにすると有益です。一部の引数はオプションです。デフォルトの引数機能を使用すると、クライアント コードで値が提供されない場合に使用できる引数のデフォルト値を設定できます。

問題: デフォルトの引数として非静的メンバー変数を使用する

あなたの場合、MoveTo メンバー関数のデフォルト引数としてメンバー変数 (initPos) を使用しようとしました。ただし、コンパイラは、非静的データ メンバーの無効な使用を示すエラーを発行しました。

問題分析

メンバー変数は、メソッドの一部とみなされているため、デフォルトではメソッドのスコープ内でアクセスできません。メソッドのコンテキストではなく、オブジェクトの状態を表します。その結果、デフォルトでは、メンバー関数の引数はクラス内またはグローバル スコープの要素にのみ依存できます。

解決策: メソッドのオーバーロード

この問題を解決するには、メソッドのオーバーロードに頼る必要があります。 。メソッドのオーバーロードを使用すると、異なるシグネチャを持つ同じメソッドの複数のバージョンを作成できます。これをコードに実装する方法は次のとおりです。

// Object.h
class Object
{
public:
    ...
    void MoveTo(double speed);
    void MoveTo(double speed, Point position);

protected:
    Point initPos; 
    Point currPos;

};
ログイン後にコピー
// Object.c
void Object::MoveTo(double speed)
{
    MoveTo(speed, initPos);
}

void Object::MoveTo(double speed, Point position)
{
    // Everything is done here.
}
ログイン後にコピー

MoveTo メソッドの 2 つのバージョンを定義することで、メンバー変数に直接依存せずにデフォルトの引数を効果的に提供できます。 MoveTo(double) メソッドは、2 番目の引数として initPos 値を指定して MoveTo(double, Point) メソッドを呼び出します。これにより、必要な機能を保持し、コンパイラ エラーを回避できます。

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

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