我有一个抽象类列表:
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的数组。
答案 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>&);
};