类模板与类模板成员函数分离定义的注意事项

(1)源文件一定要有宏包含:

#ifndef _VECTOR_CPP_
#define _VECTOR_CPP_

(2)头文件尾部一定要有宏包含:

#include "Vector.cpp"

(3)在源文件中定义类模板的构造函数和赋值操作符时,一定要注意,
正确形式如下:

```cpp
//Vector.cpp
#ifndef _VECTOR_CPP_
#define _VECTOR_CPP_

#include "Vector.h"

//move constructor and move assignment operator
template<typename T>
Vector<T>::Vector(Vector&& rhs) :theSize(rhs.theSize),
theCapacity(rhs.capacity), objects(rhs.objects)
{
	rhs.theSize = 0;
	rhs.theCapacity = 0;
	rhs.objects = nullptr;
}
template<typename T>
Vector<T>& Vector<T>::operator=(Vector&& rhs)
{
	std::swap(theSize, rhs.theSize);
	std::swap(theCapacity, rhs.theCapacity);
	std::swap(objects, rhs.objects);
	return *this;
}

//resize
template<typename T>
void Vector<T>::resize(int newsize)
{
	if (newsize > theCapacity)
		reserve(2 * newsize);
	theSize = newsize;
}
//reserve
template<typename T>
void Vector<T>::reserve(int newcapacity)
{
	if (newcapacity < theSize)
		return;
	T* newarray = new T[newcapacity];
	for (int i = 0; i < theSize; ++i)
		newarray[i] = std::move(objects[i]);

	theCapacity = newcapacity;
	std::swap(newarray, objects);
	delete[] newarray;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值