-1

私はいくつかのプロジェクトに取り組んでおり、いくつかの簡単なアドバイスが必要です。

基本クラスが1つあり、その基本から派生したクラスが6つあります。

これらの6つの派生クラスのうち5つには2つのプライベートintが必要ですが、6番目には1つのプライベートが必要intです。そしてもちろん、メンバー関数get()set()両方のint(6番目は1つget()だけset()int

私の質問は次のとおりです。2つintのsとset()andget()関数を持つ基本クラスがあるべきですか、それとも1つとintandset()を持つ基本クラスを持つべきget()ですかint、そして他のすべての派生クラス(6番目を除く)にはさらに1つとint2つのメソッドがありますか?

4

3 に答える 3

3

あなたの質問に対する答えは、さまざまなクラスモデルが何をしているのか、そしてintデータメンバーが何を意味しているのかによって異なります。派生クラスが実際に基本クラスから継承する必要があると仮定しましょう(これは大きな仮定です)。また、ここでは公的継承について話していると思います。

int確かに、基本クラスには両方のデータメンバーが含まれていてはなりません。階層が正しい場合、2番目のメンバーはこのクラスの一部のオブジェクトに対してのみ意味があります(具体的には、6番目のクラスのオブジェクトには意味がありません)。パブリック継承はIS-A関係をモデル化することを忘れないでください。基本クラスのすべての部分は、すべての派生クラスにも適用される必要があります。

次に、最初のデータメンバーについて説明します。すべての派生クラスで同じ意味ですか?それはあなたがおそらく持つことができる他の派生クラスについても同じことを意味しますか?基本クラスのすべてのオブジェクトにこのメンバーが必要ですか?その場合は、基本クラスに表示されます。

ここで最も重要なことは、正しい継承を備えた優れたデザインを持つことです。あなたがそれを持っているなら、あなたの質問への答えは些細なことです。そうしないと、最初に設計を修正する必要があるため、答えは重要ではありません。

于 2012-08-17T09:23:47.143 に答える
3

私の質問は次のとおりです。2つintのsとset()andget()関数を持つ基本クラスがあるべきですか、それとも1つとintandset()を持つ基本クラスを持つべきget()ですかint、そして他のすべての派生クラス(6番目を除く)にはさらに1つとint2つのメソッドがありますか?

パブリック継承を想定すると、これは設計要件のみに依存します。自問してみてください:基本クラス参照を介してその秒にアクセスする必要がありますか?intその答えが「はい」の場合、その基本クラスに含まれている必要があります。答えが「いいえ」の場合、その基本クラスに含めるべきではありません。

他のデータを数回実装しない動機は理解していますが、これは実装の成果物であり、設計ではなく、実装で解決する必要があります(これを実装する別のベースから個人的に継承できます)。


とはいえ、セッターとゲッターが必要な場合は、間違っていることに注意してください。

于 2012-08-17T09:52:31.863 に答える
0

確かに、クラスに冗長なメソッドを含めるべきではありません。他の5つのベースとして機能する7番目のクラスを作成することをお勧めします。

class BaseLevelOne { protected: int X; };
class BaseLevelTwo : public BaseLevelOne { protected: int Y; };

class One : public BaseLevelOne { /* get & set */ };
class Two /* Three, Four, etc. */ : public BaseLevelTwo { };

このようにあなた:

  • int次の5回書く必要はありません
  • クラス1に冗長メンバーを含める必要はありません

ただし、これらのクラスで何をしたいのかを実際に述べた場合、私の答えはおそらくより正確で、実際のユースケースにより適している可能性があります。

于 2012-08-17T09:20:24.473 に答える