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

C++ 将基类(c+;+;)的默认复制构造函数替换为复制构造函数,c++,inheritance,copy-constructor,base-class,C++,Inheritance,Copy Constructor,Base Class,我有一个抽象类列表: template <class V> class List { public: void toArray(void*) const = 0; // other methods }; 我不想为ArrayList(const-ArrayList&)重写ArrayList(const-ArrayList&)中的代码,因为它们都使用在List中声明的相同toArray(void*)方法。我该怎么做?我还希望避免调用ArrayList的默认构造函数,因为它分配了一个

我有一个抽象类列表:

template <class V>
class List {
public:
  void toArray(void*) const = 0;
// other methods
};
我不想为
ArrayList(const-ArrayList&)
重写
ArrayList(const-ArrayList&)
中的代码,因为它们都使用在
List
中声明的相同
toArray(void*)
方法。我该怎么做?我还希望避免调用
ArrayList
的默认构造函数,因为它分配了一个最小大小为8个值的数组。

模板
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:
};
类ArrayList:公共列表 { 公众: 数组列表(常量列表&); //使用委托构造函数(C++11特性) ArrayList(const ArrayList&val):ArrayList(static_cast(val)){} 无效至阵列(无效*)常数; 私人: };
如果您的编译器不支持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>&);
};
模板
类ArrayList:公共列表
{
公众:
ArrayList(const List&val){construct(val;)}
ArrayList(const-ArrayList&val){construct(val;)}
无效至阵列(无效*)常数;
私人:
无效构造(常量列表&);
};

到底是什么问题?使用Facebook、Blogger或Twitter等网站更新状态。使用堆栈溢出来提问。
//错误提示是私有的
:是的,您将其设置为私有。您可以完全忽略复制构造函数的规范,或者为
List
显式提供另一个公共签名:
ArrayList(const List&)
如果我简单地忽略复制构造函数的规范,则使用默认的复制构造函数。我喜欢这个简单的解决方案!我知道委托构造函数,但我试图避免它,所以我将使用您的第二个解决方案。非常感谢你,德米特里!
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:
};
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>&);
};