将默认复制构造函数替换为基类的复制构造函数(c ++)

时间:2014-03-22 15:08:26

标签: c++ inheritance copy-constructor base-class

我有一个抽象类列表:

template <class V>
class List {
public:
  void toArray(void*) const = 0;
// other methods
};

我有一个继承的类arraylist:

template <class V>
class ArrayList:
  public List<V>
{
public:
  ArrayList(const List<V>&);
  void toArray(void*) const;
private:
  ArrayList(const ArrayList&); //Remove default copy ctor
// other methods and functions
};

调用ArrayList(const ArrayList&)时,我想使用ArrayList(const List&)的构造函数。

LinkedList<int> link; // also inherited from list
// populate list
ArrayList<int> lst = link; // works fine
ArrayList<int> newList = lst; // error ctor is private

我不想在ArrayList(const List&)中为ArrayList(const ArrayList&)重写代码,因为它们都使用toArray(void*)中声明的相同List方法。我该怎么做呢?我还想避免调用ArrayList的默认ctor,因为它分配了一个最小值为8的数组。

1 个答案:

答案 0 :(得分:0)

template <class V>
class ArrayList: public List<V>
{
public:
  ArrayList(const List<V>&);

  // use delegating constructor (C++11 feature)
  ArrayList(const ArrayList& val) : ArrayList( static_cast<const List<V>&>(val) ) {}

  void toArray(void*) const;
private:
};

如果您的编译器不支持C ++ 11:

template <class V>
class ArrayList: public List<V>
{
public:
  ArrayList(const List<V>& val) { construct(val;) }
  ArrayList(const ArrayList& val) { construct(val;) }
  void toArray(void*) const;
private:
  void construct(const List<V>&);
};