//ArrayTemplate.h
#ifndef _ARRAYTEMPLATE_H
#define _ARRAYTEMPLATE_H
#include "stdafx.h"
#include<iostream>
using namespace std;
template <class T>
class Array
{
public:
Array(int nSize); //构造函数
~Array(); //析构函数
T& operator[](int nIndex); //运算符重载
int Size()
{
return m_nSize; //获取数组元素个数
}
bool AddNewElements(int nAddSize); //添加新的数组元素
void Display();
private:
T *m_pArray;
int m_nSize;
};
template <class T>
Array<T>::Array(int nSize)
{
m_nSize = nSize; //数组规模
m_pArray = new T[nSize + 1];
}
template <class T>
Array<T>::~Array() //析构函数
{
delete[]m_pArray;
}
template <class T>
T& Array<T>::operator[](int nIndex) //运算符重载
{
if (nIndex < 0 || nIndex >= m_nSize)
{
cout << "数组下标越界!" << endl;
//用多余的数组元素存储无效值
m_pArray[nIndex] = 0;
}
return m_pArray[nIndex];
}
template <class T>
void Array<T>::Display()
{
for (int ni = 0; ni < m_nSize; ni++)
{
cout << m_pArray[ni] << " ";
}
cout << endl;
}
template <class T>
bool Array<T>::AddNewElements(int nAddSize) //添加新的数组元素
{
if (nAddSize <= 0)
{
cout << "新增加的数组元素个数必须大于0!" << endl;
return false;
}
T *pNewArray = new T[nAddSize + m_nSize + 1];
if (pNewArray == NULL)
{
cout << "新增加数组元素内存分配失败!" << endl;
return false;
}
for (int i = 0; i < m_nSize; i++)
{
pNewArray[i] = m_pArray[i];
}
delete[]m_pArray; //将原数组内存释放
m_pArray = pNewArray; //设置新数组
m_nSize += nAddSize;
return true;
}
#endif
// ClasssTemplate_example.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"ArrayTemplate.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Array<int> nArray(10);
Array<double> dArray(10);
Array<char> cArray(10);
for (int i = 0; i < 10; i++)
{
nArray[i] = 1;
dArray[i] = i+6.5;
cArray[i] = i+'c';
}
nArray.Display();
dArray.Display();
cArray.Display();
nArray[10] = 20; //有效下标为0-9,访问nArray[10],所以显示下标越界
nArray.Display();
nArray.AddNewElements(1);
nArray[10] = 20;
nArray.Display();
getchar();
return 0;
}
运行结果: