C++一维数组的实现

 以下程序已在VC6.0测试通过: 
#ifndef _ARRAY1D
#define _ARRAY1D
#include<iostream.h>
template<class T>
 class CArray1D  
{
public:
CArray1D(int size = 0);
CArray1D(const CArray1D<T>& v); // 复制构造函数
~CArray1D() {delete [] element;}
T& operator[](int i) const;
int Size() {return size;}
CArray1D<T>& operator=(const CArray1D<T>& v);
CArray1D<T> operator+() const; // 一元加法操作符
CArray1D<T> operator+(const CArray1D<T>& v) const;
CArray1D<T> operator-() const; // 一元减法操作符
CArray1D<T> operator-(const CArray1D<T>& v) const;
CArray1D<T> operator*(const CArray1D<T>& v) const;
CArray1D<T>& operator+=(const T& x);
void Output(ostream& out) const;
private :
int size;
T *element; //一维数组
};

template<class T>
CArray1D<T>::CArray1D(int sz)
{// 一维数组的构造函数
if (sz >= 0)
{
	size = sz;
  element = new T[sz];
}
}
template<class T>
CArray1D<T>::CArray1D(const CArray1D<T>& v)
{// 一维数组的复制构造函数
size = v.size ;
element = new T[size]; // 申请空间
for (int i = 0; i < size; i++) // 复制元素
element[i] = v.element[i];
}

template<class T>
T& CArray1D<T>::operator[](int i) const
{// 返回指向第i个元素的引用
 if (i >= 0 &&i < size) 
 return element[i];
}

template<class T>
CArray1D<T>& CArray1D<T>::operator=(const CArray1D<T>& v)
{// 重载赋值操作符=
if (this != &v) {// 不是自我赋值
size =v.size;
delete [] element; // 释放原空间
element = new T[size]; // 申请空间
for (int i = 0; i < size; i++) //复制元素
 element[i] = v.element[i];
}
return *this;
}

template<class T>
CArray1D<T> CArray1D<T>:: operator-(const CArray1D<T>& v) const
{// 返回w = (*this) - v
if (size == v.size) 
{
// 创建结果数组w
CArray1D<T> w(size);
for (int i = 0; i < size; i++)
w.element[i] =element[i] -v.element[i];
return w;
}

}

template<class T>
CArray1D<T> CArray1D<T>::operator-() const
{// 返回w = -(*this)
// 创建结果数组w
CArray1D<T> w(size);
for (int i = 0; i < size; i++)
w.element[i] = -element[i];
return w;
}
template<class T>
CArray1D<T>& CArray1D<T>::operator+=(const T& x)
{ //把x 加到( *this)的每个元素上
for (int i = 0; i<size; i++)
element[i] += x;
return *this;
}
template<class T>
void CArray1D<T>::Output(ostream& out) const
{
for (int i = 0; i<size; i++)
out<<element[i] << " ";
}
// 重载<<
template <class T>
ostream& operator<<(ostream& out, const CArray1D<T>& x)
{
	x.Output(out);
	return out;
}
#endif


 

在主函数的调用如下:

 

#include "Array1D.h"
void main()
{
	#include "Array1D.h"
void main()
{
 CArray1D<int> w(5);
 w[0]=1;
 w[1]=22;
 w[2]=10;
 w[3]=32;
 w[4]=98;
 cout<<w<<endl;
 w+=5;
 cout<<w<<endl;
 w=-w;
 cout<<w<<endl;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值