C++:类模板示例

//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;
}

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值