3

Bjarne Stroustrup: 私の経験則では、クラスの不変条件を考慮できる場合にのみ、インターフェイスと非表示の表現を備えた実際のクラスを使用する必要があります。

現在のプロジェクトでは、Widget という基本クラスがありました。x、y、幅、高さ (基本的には rect データ構造) のプライベート変数と、それぞれのパブリック ゲッターとセッターがありました。それらは、愚かな変数ホルダーであることを除いて、クラスにとって何の目的もありませんでした。上記の Bjarnes のコメントに照らして、私はこのクラスを取り除きましたが、このデータ構造をそれらを必要とする子クラスとどのように共有すべきか疑問に思っています。各クラスのメンバーとして個別に含める必要がありますか? Widget 名前空間に入れますか?

4

3 に答える 3

2

構造体を使用できます

例えば

struct widget
{
    int x;
    int y;
    int w;
    int h;
};
于 2012-11-10T22:38:19.260 に答える
1

Bjarneに完全に同意するかどうかはわかりません(不変条件は別として、表現を変更する機能は重要な懸念事項かもしれませんが、その場合、実際の定義を単に作成するのではなく、 PImplprivateに移動することさえ重要かもしれません)。ただし、public変更されたメンバーや不変条件に関する懸念がない場合は、メンバーにアクセスできる構造体に変数をグループ化できます。場合によっては、メンバーが実際にセマンティックな意味を持たずにまとめられている場合は、単に a を使用することもできますstd::tuple:

typedef std::tuple<int, int, double, double> widget;

...この場合、さまざまなメンバーにアクセス機能がありますが、不変条件と前方互換性から独立した技術的な理由からです。

于 2012-11-10T22:46:04.430 に答える