私はクラス(例として名前を)持っている:OOPデザイン - 保護された独自のクラスで使用されていないメンバー - だけサブクラスで使用
class Animal
{
public:
// some virtual methods
};
は、いくつかのサブクラスもあります。あなたが見ることができるように犬と象のオブジェクトを作成するときに
class Dog : public Animal
{
public:
Dog(Map&);
// methods - using m_Map
private:
Map& m_Map;
};
class Elephant : public Animal
{
public:
Elephant(Map&);
// methods - using m_Map
private:
Map& m_Map;
};
は、マップの参照が提供されなければならない、とこれらのクラスは、それを使用しています。 Animal(Dog、Elephant、Mouse、Catなど)の類似したサブクラスがたくさんあります - すべてMapオブジェクトを使用します。
動物のすべてのサブクラスはMapオブジェクトを使用して、私は例えば、保護されたメンバーとしてAnimalクラスに追加する良いでしょう場合を考えていた:
class Animal
{
public:
Animal(Map&);
// some virtual methods
protected:
Map& m_Map;
};
class Dog : public Animal
{
public:
Dog(Map& map) : Animal(map);
// methods - using Animal::m_Map
};
class Elephant : public Animal
{
public:
Elephant(Map& map) : Animal(map);
// methods - using Animal::m_Map
};
しかし、Animalクラス決してMapオブジェクトを使用しているので、ここではそれを格納するのが自然ではないようです。サブクラスの使用のみです。
一方、AnimalのすべてのサブクラスはMapオブジェクトを使用します。そのため、Animalクラスで表示するとよいでしょう。また、すべてのサブクラスでメンバーとして定義すると、コードが重複していると感じています。
あなたはどう思いますか? Mapオブジェクトは、すべてのサブクラスまたはAnimalクラスのメンバとして定義する必要がありますか?
外部状態への参照はデザインが小さいです。しかしそれとは別に、基本クラスの機能として共通性を捕捉することはOKです。これが基本クラスの目的です。 –
これはプログラマのためのより良い質問です。 – xaxxon
私はプログラマーズに所属しているので、この質問を議論の対象にしないと投票しています。 – xaxxon