“CArry.h”
template
class CArray
{
friend ostream& operator<<(ostream &out, const CArray &rObj);
public:
CArray();
CArray(const CArray &rArray);
CArray(const int *pArray, int nLen);
~CArray();
int& operator[](int nIndex);
CArray& operator=(const CArray &rArray);
int GetLen();
void BubbleSort(int *pArray, int nLen);
private:
int *m_pArray;
int m_nLen;
};
//////////////////////////////////////////////////////////////////////////
// 构造、析构
//////////////////////////////////////////////////////////////////////////
template
CArray::CArray()
{
m_pArray = NULL;
m_nLen = 0;
cout << "缺省--CArray::CArray()" << endl;
}
template
CArray::CArray(const CArray &rArray)
{
m_pArray = NULL;
m_nLen = 0;
if (this != &rArray)
{
if (rArray.m_nLen > 0)
{
m_nLen = rArray.m_nLen;
m_pArray = new ARR[m_nLen];
for (int i = 0; i < m_nLen; i++)
{
m_pArray[i] = rArray.m_pArray[i];
}
}
}
cout << "拷贝--CArray::CArray(const CArray &rArray)" << endl;
}
template
CArray::CArray(const int *pArray, int nLen)
{
m_pArray = NULL;
m_nLen = 0;
if (NULL != pArray && nLen > 0)
{
m_nLen = nLen;
m_pArray = new ARR[nLen];
for (int i = 0; i < nLen; i++)
{
m_pArray[i] = pArray[i];
}
}
cout << "赋值构造--CArray::CArray(const int *pArray, int nLen)" << endl;
}
template
CArray::~CArray()
{
delete[] m_pArray;
m_pArray = NULL;
m_nLen = 0;
cout << "析构--CArray::~CArray()" << endl;
}
//////////////////////////////////////////////////////////////////////////
// 运算符重载
//////////////////////////////////////////////////////////////////////////
template
int& CArray::operator[](int nIndex)
{
return m_pArray[nIndex];
}
template
CArray& CArray::operator=(const CArray &rArray)
{
if (this != &rArray)
{
if (NULL != m_pArray)
{
delete[] m_pArray;
m_pArray = NULL;
m_nLen = 0;
}
if (rArray.m_nLen > 0)
{
m_nLen = rArray.m_nLen;
m_pArray = new ARR[m_nLen];
for (int i = 0; i < m_nLen; i++)
{
m_pArray[i] = rArray.m_pArray[i];
}
}
}
return *this;
}
//////////////////////////////////////////////////////////////////////////
// 函数接口
//////////////////////////////////////////////////////////////////////////
template
int CArray::GetLen()
{
return m_nLen;
}
template
void CArray::BubbleSort(int *pArray, int nLen)
{
for (int i = 0; i < nLen; i++)
{
for (int j = 0; j < nLen - 1; j++)
{
if (pArray[i] < pArray[j])
{
int nTemp = pArray[i];
pArray[i] = pArray[j];
pArray[j] = nTemp;
}
}
}
cout << "BubbleSort: ";
for (i = 0; i < nLen; i++)
{
cout << pArray[i] << " ";
}
cout << endl;
}
//////////////////////////////////////////////////////////////////////////
// friend
//////////////////////////////////////////////////////////////////////////
template
ostream& operator<<(ostream &out, const CArray &rObj)
{
for (int i = 0; i < rObj.m_nLen; i++)
{
cout << rObj.m_pArray[i] << ” “;
}
return out;
}
主函数”main”
int main(int argc, char* argv[])
{
int aNum[] = {1, 2, 4, 3, 5, 6};
CArray obj(aNum, 6);
cout << "aNum: ";
for (int i = 0; i < obj.GetLen(); i++)
{
cout <
}
使用模板时,函数的接口和定义不能分开,这是由编译器造成的,C++标准支持分开。