#include <iostream>
using namespace std;
class Point
{
int x, y;
public:
//构造函数,
Point(int ix = 0, int iy = 0)
:x(ix), y(iy)
{
cout << endl << "Point(" << x << "," << y << ") is called!";
}
//析构函数,
~Point()
{
cout << endl << "~Point(" << x << "," << y << ") is called!";
}
//友元输出函数,
friend ostream& operator<<(ostream&, const Point&);
//operator =操作符重载,
Point& operator =(const Point& pt)
{
cout << endl << "Point operator= is called!";
x = pt.x; y = pt.y;
return *this;
}
};
ostream& operator<<(ostream& on, const Point& pt)
{
return cout << "(" << pt.x << "," << pt.y << ")";
}
template <typename T>
class DynamicArray {
private:
T* array; //pointer ,一个T类型的指针
unsigned int mallocSize; //分配空间的大小。
public:
//Constructors
DynamicArray(unsigned length, const T &content); // mallocSize=length; 设置每个元素的初始内容是 content;
//Copy Constructor
DynamicArray(const DynamicArray<T> & anotherDA);
// Destructors
~DynamicArray();
//return the this->mallocSize
unsigned int capacity() const { return this->mallocSize; }
// for the array[i]=someT.
T& operator[](unsigned int i) { return this->array[i]; }
//自己定义个operator[] const 重载
T& operator[](unsigned int i) const { return this->array[i]; }
//自己定义个 operator = 重载
DynamicArray<T> & operator= (const DynamicArray<T> & anotherDA);
};
template <typename T>
DynamicArray<T>::DynamicArray(unsigned length, const T &content)
{
this->array = new T[length];
this->mallocSize = length;
for (int i = length; i-- > 0;){
this->array[i] = content;
}
}
template <typename T>
DynamicArray<T>::DynamicArray(const DynamicArray<T> & a)
{
this->mallocSize = a.capacity();
this->array = new T[a.capacity()];
for (int i = a.capacity(); i-- > 0;){
this->array[i] = a[i];
}
}
template <typename T>
DynamicArray<T>::~DynamicArray()
{
if (this->array){
delete[] this->array;
this->array = 0;
this->mallocSize = 0;
}
}
template <typename T>
DynamicArray<T>& DynamicArray<T>::operator=(const DynamicArray<T> &a)
{
this->~DynamicArray<T>();
this->mallocSize = a.capacity();
this->array = new T[a.capacity()];
for (int i = a.capacity(); i-- > 0;){
this->array[i] = a[i];
}
return *this;
}
//StudybarCommentBegin
int main()
{
int length, i;
cin >> length;
DynamicArray<double> iarray0(length, 3.14);
DynamicArray<Point> iarray(length, Point(3));
DynamicArray<Point> iarray2(iarray), iarray3(iarray2);
for (i = 0; i < length; i++) {
cout << endl << iarray3[i] << " ";
cout << iarray0[i];
iarray[i] = Point(i, i + 1);
}
iarray3 = iarray2 = iarray;
cout << endl;
for (i = 0; i < length; i++) {
cout << iarray3[i] << " ";
}
return 0;
}
//StudybarCommentEnd