如何在C ++中自定义嵌套类的方法

时间:2011-05-19 11:36:48

标签: c++ inheritance inner-classes nested-class

我有一个带有嵌套类Inner_vector的类A,

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派生一个子类,并自定义内部类“Inner_vector”的“append”和“delete”方法(主要是添加一个新操作),以便调用自定义操作。我怎么能这样做?我是否还应该在A :: Inner_vector中从Child_A中派生一个新的嵌套类,如下面的代码

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 个答案:

答案 0 :(得分:6)

在C ++中,除了作用域之外,内部类与包含它们的类无关。所以你必须在派生类中派生基类的内部类。

答案 1 :(得分:1)

你永远不能为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
  }
};

如果这是不可能的,那么你必须派生两个类,因为它们是无关的。