設計一個float類型的數組類CFltArray,要求CFltArray可以進行如下操作:
(1)可以重置數組的大小(Resize)
(2)可以通過下標返回數組元素,並對下標越界情況進行檢查
(3)可以利用已知數組對象對整個數組賦值和初始化
(4)可以返回當前數組的大小(Size)
最後用數據驗證你所設計的類。
提示:
(1)利用已知數組對象對整個數組賦值,說明要求重載等號運算符
(2)利用已知數組對象對整個數組初始化,說明要求重載拷貝構造函數
(3)要求用指針存儲數組對象中元素
#include<iostream>
#include<stdlib.h>
using namespace std;
class CFltArray
{
public:
CFltArray(int sz);
CFltArray(CFltArray &A);
float& operator = (CFltArray A);
float& operator [] (int i);
void ReSize(int sz);
int GetSize();
~CFltArray();
private:
int size;
float *Arr;
};
//默認構造函數
CFltArray::CFltArray(int sz)
{
if(sz <= 0)
exit(1);
size = sz;
Arr = new float[size];
}
//析構函數
CFltArray::~CFltArray()
{
delete [] Arr;
}
//重置數組的大小
void CFltArray::ReSize(int sz)
{
size = sz;
Arr = new float[size];
}
//通過下標返回數組元素
float& CFltArray::operator [](int i)
{
if(i < 0 || i > size - 1)
{
cout << "數組下標越界!" << endl;
exit(1);
}
return Arr[i];
}
//返回當前數組的大小
int CFltArray::GetSize()
{
return size;
}
CFltArray::CFltArray(CFltArray &A)
{
size = A.GetSize();
Arr = new float[size];
float *ap = A.Arr;
float *tp = Arr;
for(int i = 0; i < size; i++)
*tp++ = *ap++;
cout << "拷貝構造函數被調用" << endl;
}
float& CFltArray::operator = (CFltArray A)
{
size = A.size;
Arr = new float[size];
float *ap = A.Arr;
float *tp = Arr;
for(int i = 0; i<size; i++)
tp[i] = ap[i];
return Arr[size];
}
int main(void)
{
CFltArray array(10);
for(int i = 0; i < 10; i++)
array[i] = i;
for(int i = 0; i < 10; i++)
cout << array[i] << " ";
cout << endl;
CFltArray Aarray = array;
cout << "初始化後數組大小: " << Aarray.GetSize() << endl;
cout << Aarray[8] << endl;
array.ReSize(20);
cout << "重置後數組大小: " << array.GetSize() << endl;
system("pause");
return 0;
}