用模板类 完成不同类型数组的构造以及运算符重载
array.h
#ifndef _ARRAY_H_
#define _ARRAY_H_
#include <iostream>
using namespace std;
template<typename T>
class Array
{
private:
T *m_data;
int m_len;
public:
Array();
Array(int l);
Array(const Array &a);
~Array();
template<typename U>
friend ostream &operator <<(ostream &out,const Array<U> &a);
T &operator [](int index);
};
#endif
array.hpp
#include <iostream>
#include "array.h"
#include <stdlib.h>
using namespace std;
template <typename T>
Array<T>::Array()
{
m_len = 0;
m_data = new T(1);
}
template <typename T>
Array<T>::Array(int l)
{
m_len = l;
m_data = new T(m_len + 1);
}
template <typename T>
Array<T>::Array(const Array<T> &a)
{
m_len = a.m_len;
m_data = new T(m_len + 1);
for(int i=0;i<m_len;i++)
{
m_data[i] = a.m_data[i];
}
}
template <typename T>
Array<T>::~Array()
{
if(m_data != NULL)
{
delete[] m_data;
}
}
template <typename T>
ostream &operator <<(ostream &out,const Array<T> &a)
{
for(int i=0;i<a.m_len;i++)
{
out << a.m_data[i] << " ";
}
return out;
}
template <typename T>
T& Array<T>::operator[](int index)
{
return m_data[index];
}
Main.cpp
#include "array.hpp"
using namespace std;
int main()
{
Array<int> a(5);
Array<int> b(a);
cout << a << endl;
cout << b << endl;
return 0;
}