template模板函数写基本数组类 案例

“CArry.h”

ifndef CARRAY_H

define CARRAY_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;

}

endif

主函数”main”

include “stdafx.h”

include “CArray.h”

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++标准支持分开。

你可能感兴趣的:(IT)