4

重複の可能性:
なぜゲッターとセッターを使用するのですか?

誰かがゲッター/セッターメソッドの使用法を教えてもらえますか?

インタビューの1つで、誰かが私に簡単なクラスを書くように頼みました...それで、私は以下に示すようにクラスを書きました:

class X
{
    int i;
public:

    void set(int ii){ i = ii;}
    int get(){ return i;}
};

さて、質問は次のようになります。

Q1。変数「i」をパブリックではなくプライベートとして宣言したのはなぜですか?

私の答え:Bcoz、データは常に機密性が高く、プライベートと宣言することで、データが外の世界にさらされるのを防ぐことができます。

私の推論に対抗するために、インタビュアーは次のように述べました...「では、なぜパブリックゲッター/セッターメソッドを提供したのですか??これらのメンバー関数はパブリックであるため、変数「i」は外部に公開され、誰でも変更できます。 「i」の値。」

さらに、インタビュアーは私に以前のクラスを次のように書き直すように提案しました。

class X
{
public:

    int i;
};

利点は次のとおりです。今回は関数呼び出しが必要ないため、「i」の値をより迅速に変更できます。

インタビュアーの推論は良いようですが....プライベート変数「i」とパブリックget/setメソッドを作成することにより、データを保護することはできません。では、なぜget()/ set()メソッドを書くのでしょうか?

4

5 に答える 5

3

その目的は、必要に応じて、より洗練されたロジック (たとえば、有効性チェック) を使用して、setter メソッドと getter メソッドをいつでも変更できるようにすることです。ゲッター/セッターを使用しない場合は、それらを記述してから、フィールドを変更するすべての場所でコードを変更する必要があります。これにより、見つけるのが非常に困難なエラーが発生する可能性があります。

于 2012-08-23T19:28:53.317 に答える
3

アクセサーとミューテーターを使用して、その変数へのアクセスに使用されるロジックを非表示にします。ロジックが変更された場合、そのパブリック変数にアクセスするすべての場所ではなく、メンバー関数でのみ変更する必要があります。これにより、内部状態データが外部から隠され、これらの操作の実装の詳細について心配する必要がなくなります。

于 2012-08-23T19:29:04.957 に答える
1

データのカプセル化を確実にするために、ゲッター/セッターとプライベート データ変数を使用します。

于 2012-08-23T19:29:33.990 に答える
1

これらのアクセサーをprivateにすることができます。クライアントは型のデータ表現を知る必要はありません。これは抽象化のコンポーネントです。

于 2012-08-23T19:29:52.450 に答える
0

私が答えたのは:

変数 'i' を public として宣言でき、get/set メソッドの使用を削除できることに同意します。ただし、これは、将来クラス変数を変更しないことが 100% 確実な場合にのみ実行できます。

なぜなら... get/set メソッドを削除すると、何百ものファイルで「i」を直接使用することになるからです。[例: object.i = 10;] j' の場合、ファイルは失敗し始めます。

したがって、この問題を解決するには、get/set メソッドを使用します。変更を加える必要がある唯一の場所は、クラス X、make 'i' --> 'j' 内です。

それが、get/set メソッドについて考えられる唯一の用途です。

于 2012-08-23T19:32:54.300 に答える