首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++模板菜鸟的疑惑

2013-01-23 
c++模板初学者的疑惑templateclass Type, size_t INIT_SIZE 10class DynamicArray{public:DynamicArra

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>
     

热点排行