-1

Qt と同じように、 QPoint クラスで見ました。QPoint.x() を使用して取得し、 QPoint.setX() を使用して設定します。xをパブリック変数として使用しないのはなぜですか? いくつかの本がそれを推奨していることは知っていますが、それについての深い理由は何ですか? 時にはあまり便利ではありません。

4

2 に答える 2

3

これには 3 つの基本的な理由があります。

  1. 抽象化。xが値で保存されるか、毎回計算されるかをユーザーが認識したり、気にしたりする必要はありません。たぶん、ボックスの上部の x 座標とその幅を保存し、 として計算xmax_x - widthます。バージョン 3.4 でデータの保存方法を変更した可能性があります。
  2. 一貫性。width を関数 ( ) として呼び出すxときに、変数 ( ) として呼び出すことをユーザーが覚えておく必要はありません。したがって、簡単にして、すべてを(合理的な範囲で)関数として持ってください。myobject.xmyobject.width()
  3. コントロール。たぶんx、ポジティブであることだけが許されるか、あるいは、あなたが変わるときxupper_xまた変わる必要があります。セッター/ゲッターを使用すると、これらすべてを強制できます。
于 2013-03-27T00:27:47.277 に答える
1

privateメンバーを作成し、getter と setter でアクセスする一般的な理由は 3 つあります。

  1. メンバーに対していくつかの不変条件を維持する必要があります。つまり、メンバーがオブジェクトを無効にする可能性のある値がある場合、クライアントが自分の意志でそれを変更できないようにします。Stroustrupstructは、不変条件がない場合はa を使用することを推奨しています。

  2. インターフェイスでメンバーを別の形式で公開する必要があります。たとえば、a を格納しているPersondateOfBirth、メンバー関数を介して公開したい場合ですgetAge()dateOfBirth年齢は出生データから計算されますが、クライアントが直接アクセスすることは望ましくありません。

  3. 将来のある時点で、前の 2 つのポイントの一方または両方が真になる可能性があります。

もし私が を実装していたらPoint、私はそれを にし、パブリック メンバーstructを持っていxます。y無効というものはまったくPointなく、他の表現から座標を計算する必要があるとは想像できません。ただし、Qt 開発者は明らかに別の決定を下しました。

于 2013-03-27T00:25:41.537 に答える