函数覆盖参数继承

时间:2010-08-04 03:31:25

标签: inheritance function c++-cli override

我有一个通用项列表类来创建一个更具体的列表,使用它作为基类,就像这样..

ref class ItemBase { }
ref class ItemA : ItemBase { }
ref class ItemList abstract {
 public:
  virtual void add(ItemBase ^p);
}
ref class ItemListA : ItemList {
 public:
  virtual void add(ItemA ^p) override; // it doesn't works :(
}

我想限制在每个类中添加特定类型的项目。

1 个答案:

答案 0 :(得分:2)

执行此操作的可接受模式是制作基类方法protected

ref class ItemBase { }
ref class ItemA : ItemBase { }
ref class ItemList abstract {
 protected:
  virtual void addInternal(ItemBase ^p);
}
ref class ItemListA : ItemList {
 public:
  virtual void add(ItemA ^p){addInternal(p);} 
}

这是使用泛型的更好解决方案。请注意我们如何将通用参数T约束为ItemBase,以强制此集合只能与ItemBase或其子类一起使用。

ref class ItemBase { };
ref class ItemA : public ItemBase { };

generic <class T>
where T: ItemBase
ref class ItemList abstract {
 public:
     virtual void Add(T p){}
};

ref class ItemListA : ItemList<ItemA^> {
   //no need to override Add here
};

//usage
int main(array<System::String ^> ^args)
{
    ItemListA^ list = gcnew ItemListA();
    list->Add(gcnew ItemA());
}