как настроить методы вложенного класса в C ++ - PullRequest
4 голосов
/ 19 мая 2011

У меня есть класс A с вложенным классом Inner_vector,

class A: 
{
public: 
  class Inner_vector:public Vector
    {
      bool append(const class Element& element);
    };
};
bool A::Inner_vector::append(const class Element& element)
{
   add(element);
}

Теперь я хочу извлечь дочерний класс из A, а также настроить методы "append" и "delete" внутреннего класса "Inner_vector" (главным образом, чтобы добавить одну новую операцию), чтобы вместо этого вызывались настроенные операции , Как я мог это сделать? я также должен извлечь новый вложенный класс внутри Child_A из A :: Inner_vector как следующий код

class Child_A: public A
{
public: 
  class Inner_Child_vector : public A::Inner_vector
    {
      bool append(const class Element& element);
    };
};
bool Child_A::Inner_Child_vector::append(const class Element& element)
{
   A::Inner_vector::append();
   my_new_operation();
}

Или мне не нужно наследовать от A :: Inner_vector и напрямую переписывать его?

Я очень ценю любую помощь и комментарии.

Ответы [ 2 ]

6 голосов
/ 19 мая 2011

В C ++ внутренние классы не связаны с классами, содержащими их, за исключением области видимости. Таким образом, вы должны получить внутренний класс базы в производном классе.

1 голос
/ 19 мая 2011

Вы не всегда можете создать другой класс для inner_vector и иметь его в качестве защищенного члена во внешнем классе «A», тогда класс «A» может определять две виртуальные функции: добавление и удаление.

Это означает, что когда вы наследуете и создаете 'Child_A', вы просто определяете новое поведение для добавления и удаления. Это потребует от вас расширения вашего внутреннего векторного класса, чтобы дать вам достаточный доступ к его внутренним компонентам, чтобы вы могли создавать необходимые варианты добавления и удаления из классов, которые его содержат.

class A 
{
 public: 
  virtual bool append( const class Element& element )
  {
    //  your specific A behaviour
  }     

 protected:
  // std::vector or your own implementation
  std::vector _innerVector;

};

class Derived : public A
{
 public:
  virtual bool append( const class Element& element )
  {
    // derived implementation
  }
};

Если это невозможно, вы должны вывести оба класса, поскольку они не связаны.

...