-1

この C++ チュートリアルを実行しようとしています。私は C++ プログラミングの初心者です。setClass1 ではなくsetValueand getValueinを使用する理由がわかりません。class Class1他のチュートリアルでは、クラスでsetAとを使用しています。コードは次のとおりです。getAclass Class1

    class Class1 {
    int i;
public:
    void setValue( int value ) { i = value; }
    int getValue() { return i; }
};

2番目のコードは次のとおりです。

    class A{
    int ia;
public:// accessor method because they are used to access a private date member
    void setA ( const int a);
    int getA ()const;
    int getA ();
};

助けてください...

4

2 に答える 2

1

名前は任意です。任意の関数名を使用できます (もちろん、言語規則に従います)。

ただし、andを getter および setter として使用することはできますが、実際には良い考えではありません。xyzzy()plugh()

getTemperature()またはなど、呼び出しの意図を示すものを使用する必要がありますsetVelocity()。また、カプセル化は内部の詳細を公開しないことを意味するため、これらは内部フィールドに 1 対 1 でマッピングする必要さえありません。

つまり、getTemperatureC()内部フィールドがケルビンとして保存されていても、温度を摂氏で返すためのがあるかもしれません。

double getTemperatureC(void)     { return kelvins - 273.15; }
void   setTemperatureC(double t) { kelvins = t + 273.15; }

(または、getter/setter が任意の複雑な計算を使用する場合があります)。

getA()クラスに使用すると、継承Aするクラスを作成するときに問題が発生する可能性がありますが、これは言語の範囲外です。しかし、上記のガイドラインに従うことは良いプログラミングの実践です (関数は内部ではなく意図を示すべきです)。BA

于 2013-04-24T01:31:41.627 に答える
1

get と set でクラス名と同じ名前を使用し、他のクラスで異なる get と set 名を使用する理由について混乱しました。set と get の名前はコードに影響しますか?

答えはノーです

gettersetter通常、and はクラス内で呼び出されますaccessor。これらは、慣習に従って名前が付けられた単なるメンバー関数であり、コードを読む人がそれらの関数の目的を理解しやすいため、メンバー変数にアクセスしようとすると、でmutators始まるメンバー関数に名前を付けるのが常識のようです。一部のメンバー変数を変更しようとした場合。名前は、任意の有効な識別子にすることができます。getset

そうsetValueまたはsetAこれらのメンバー関数の単なる識別子です。コードには影響しません。

一方、異なるクラスは同じ名前の getter または setter を持つことができます。これらの関数名は異なるクラス スコープにあるためです。

于 2013-04-24T01:31:49.323 に答える