c++模板初学者的疑惑
template<class Type, size_t INIT_SIZE = 10>
class DynamicArray{
public:
DynamicArray();
DynamicArray(const DynamicArray &a_other);
~DynamicArray();
// 添加元素
bool add(const size_t a_index, const Type a_val);
// 删除元素
bool del(const size_t a_index);
// 清空元素
bool clear(void);
// 输出
void display(void);
// 重载 [] (下标运算)
Type & operator[](const size_t a_index);
// 重载 + (实现两个DynamicArray的拼接操作)
const DynamicArray operator+(const DynamicArray &a_other) const;
// 重载 == (判等)
bool operator==(const DynamicArray &a_other) const;
// 重载 = (赋值)
DynamicArray & operator=(const DynamicArray &a_other);
private:
// 重新申请内存
void reApp(const size_t a_size);
Type *m_base;// 数组基址
size_t m_length;// 数组长度
size_t m_size;// 数组的容量
};
我的疑惑就是到底什么地方该加DynamicArray<type>
// 重载 = (赋值)
DynamicArray & operator=(const DynamicArray &a_other);
这一句的形参为什么不加???直接DynamicArray没有具体的类型,为什么不写成
// 重载 = (赋值)
DynamicArray<Type> & operator=(const DynamicArray<Type> &a_other);
[解决办法]
类内部不用加,外部要加
[解决办法]
template<class Type>
DynamicArray operator=(const DynamicArray a_other){
// to do ...
}
[解决办法]
在类型内部的话 DynamicArray 就等价于 DynamicArray<Type>
template <typename T>
class DynamicArray{
DynamicArray& operator =(DynamicArray&);
DynamicArray<T>& operator =(DynamicArray<T>&); // 这句和上面的意思是一样的.
};
// 如果写在外部, 则必须指明
template <typename T>
DynamicArray<T>& operator =(DynamicArray<T>&){... } // 不可以省掉<T>