Qt と同じように、 QPoint クラスで見ました。QPoint.x() を使用して取得し、 QPoint.setX() を使用して設定します。xをパブリック変数として使用しないのはなぜですか? いくつかの本がそれを推奨していることは知っていますが、それについての深い理由は何ですか? 時にはあまり便利ではありません。
質問する
788 次
2 に答える
3
これには 3 つの基本的な理由があります。
- 抽象化。
x
が値で保存されるか、毎回計算されるかをユーザーが認識したり、気にしたりする必要はありません。たぶん、ボックスの上部の x 座標とその幅を保存し、 として計算x
しmax_x - width
ます。バージョン 3.4 でデータの保存方法を変更した可能性があります。 - 一貫性。width を関数 ( ) として呼び出す
x
ときに、変数 ( ) として呼び出すことをユーザーが覚えておく必要はありません。したがって、簡単にして、すべてを(合理的な範囲で)関数として持ってください。myobject.x
myobject.width()
- コントロール。たぶん
x
、ポジティブであることだけが許されるか、あるいは、あなたが変わるときx
、upper_x
また変わる必要があります。セッター/ゲッターを使用すると、これらすべてを強制できます。
于 2013-03-27T00:27:47.277 に答える
1
private
メンバーを作成し、getter と setter でアクセスする一般的な理由は 3 つあります。
メンバーに対していくつかの不変条件を維持する必要があります。つまり、メンバーがオブジェクトを無効にする可能性のある値がある場合、クライアントが自分の意志でそれを変更できないようにします。Stroustrup
struct
は、不変条件がない場合はa を使用することを推奨しています。インターフェイスでメンバーを別の形式で公開する必要があります。たとえば、a を格納している
Person
がdateOfBirth
、メンバー関数を介して公開したい場合ですgetAge()
。dateOfBirth
年齢は出生データから計算されますが、クライアントが直接アクセスすることは望ましくありません。将来のある時点で、前の 2 つのポイントの一方または両方が真になる可能性があります。
もし私が を実装していたらPoint
、私はそれを にし、パブリック メンバーstruct
を持っていx
ます。y
無効というものはまったくPoint
なく、他の表現から座標を計算する必要があるとは想像できません。ただし、Qt 開発者は明らかに別の決定を下しました。
于 2013-03-27T00:25:41.537 に答える