十四周任務1

/* (程序頭部註釋開始)           
* 程序的版權和版本聲明部分           
* Copyright (c) 2011, 煙臺大學計算機學院學生            
* All rights reserved.           
* 文件名稱:                                         
* 作    者:   王明星                          
* 完成日期:   2012   年  5 月 22日           
* 版 本 號:                     
* 對任務及求解方法的描述部分           
* 輸入描述:           
* 問題描述:類中的純虛函數         
* 程序頭部的註釋結束           
*/          
#include <iostream>    
using namespace std;  
class MyArray  
{  
private:  
    int *arr;       //用於存放動態分配的數組內存首地址   
    int size;       //數組大小   
public:  
    MyArray(int sz=50);  
    MyArray(int a[],int sz);    //由一個內置類型的數組初始化   
    MyArray(const MyArray &A);  //複製構造函數   
    ~MyArray(void);             //析構函數,注意釋放空間   
    MyArray&operator =(const MyArray &A); //重載“=”使得數組對象可以整體賦值   
    int& operator[](int i);     //重載[],使得Array對象也可以如C++普通數組一樣,用a[i]形式取出值【選做】   
    bool operator == (MyArray& A);  //重載==,使得Array對象能整體判斷兩個數組是否相等(size相等且對應元素相等)   
    MyArray operator + (MyArray& A);    //重載+,使兩個Array對象可以整體相加(前提大小相等)【選做】   
    friend ostream& operator << (ostream& out,MyArray& A);    //重載<<,輸出數組   
    int GetSize(void)const; //取數組大小;   
    void Resize(int sz);    //修改數組的大小,如果sz大於數組的原大小,增加的元素初始爲;如果sz大於數組的原大小,捨棄後面的元素【選做】   
};  
  
//以下爲類成員函數的定義   
  
//構造函數   
MyArray::MyArray(int sz)  
{  
    if(sz<=0)  
    {  
        cout<<"invalid Array Size!";  
        exit(1);  
    }  
    size=sz;            //將元素個數賦值給變量size   
    arr=new int[size];//動態分配內存,將size個int類型的元素空間分配出來   
    for(int i=0; i<size; ++i)  
        *(arr+i)=0;  
}  
  
MyArray::MyArray(int a[],int sz)  
{  
    if(sz<=0)  
    {  
        cout<<"invalidArraySize";  
        exit(1);  
    }  
    size=sz;//將元素個數賦值給變量size   
    arr=new int[size];//動態分配內存,將size個int類型的元素空間分配出來   
    for(int i=0; i<size; ++i)  
        *(arr+i)=*(a+i);  
}  
  
//析構函數   
MyArray::~MyArray(void)  
{  
    delete []arr;  
}  
  
//複製構造函數//或者拷貝構造函數 
MyArray::MyArray(const MyArray& A)  
{  
    //從對象A取得數組大小,並賦給當前對象成員   
    int n=A.size;  
    size=n;  
    //爲對象申請內存並進行出錯檢測   
    arr=new int[n];  
    //從對象A複製數組元素到本對象   
    int *srcptr=A.arr;//X.arr是對象A的數組首地址   
    int *destptr=arr;//arr是本對象中的數組首地址   
    while(n--)  
    {  
        *destptr=*srcptr;  
        destptr++;  
        srcptr++;  
    }  
}  
  
//重載'='   
MyArray& MyArray::operator =(const MyArray &A)  
{  
    int n=A.size;//取A數組的大小   
    //如果本對象中的數組大小和A不同,則刪除數組原有的內存,然後重新分配   
    if (size!=n)  
    {  
        delete []arr;  
        arr=new int[n];  
        size=n;  
    }  
  
    //從rhs向本對象複製元素   
    int* destptr=arr;  
    int* srcptr=A.arr;  
    while(n--)  
    {  
        *destptr=*srcptr;  
        destptr++;  
        srcptr++;  
    }  
    return *this;//返回當前對象的引用   
}  
  
//重載[]   
int &MyArray::operator[](int n)  
{  
    if(n<0||n>size-1)  
    {  
        cout<<"indexOutOfRange"<<endl;  
        exit(1);  
    }  
    return arr[n];  
}  
  
bool MyArray::operator == (MyArray& A)  
{  
    bool eq=true;  
    int n=A.size;   //取A數組的大小   
    if (size!=n)   //大小是否一致   
    {  
        eq=false;  
    }  
    else  
    {  
        int* destptr=arr;  
        int* srcptr=A.arr;  
        while(n--)  
        {  
            if(*destptr!=*srcptr)  
            {  
                eq=false;  
                break;  
            }  
            destptr++;  
            srcptr++;  
        }  
    }  
    return eq;//返回當前對象的引用   
}  
  
MyArray MyArray::operator + (MyArray& A)  
{  
    int n=A.size;   //取A數組的大小   
    if (size!=n)   //大小不一致不能相加   
    {  
        cout<<"not same size for add!"<<endl;  
        exit(1);  
    }  
    MyArray a(n);  //指定size的數組   
  
    for (int i = 0; i < size; i++)  
    {  
        a[i]=arr[i]+A[i];  
    }  
    return a;//返回當前對象的引用   
}  
  
ostream& operator << (ostream& out, MyArray& A)  
{  
    for (int i = 0; i < A.size; i++)  
    {  
        out<<A[i]<<'\t';  
    }  
    out<<endl;  
    return out;  
}  
  
//取當前數組大小   
int MyArray::GetSize(void)const  
{  
    return size;  
}  
  
//將數組大小修改爲sz   
void MyArray::Resize(int sz)  
{  
    if(sz<=0)  
    {  
        cout<<"invalidArraySize"<<endl;  
        exit(1);  
    }  
    if(sz==size)  
        return;  
    int *newlist=new int[sz];  
    for (int i = 0; i < sz; i++)  
    {  
        *(newlist+i)=0;  
    }  
    int n=(sz<=size)?sz:size;  
    int *srcptr=arr;  
    int *destptr=newlist;  
    while(n--)  
    {  
        *destptr=*srcptr;  
        destptr++;  
        srcptr++;  
    }  
    delete []arr;  
    arr=newlist;  
    size=sz;  
}  
  
int main()  
{  
    int a[10]={1,2,3,4,5,6,7,8,9,10};  
    int b[10]={4,5,6,7,8,9,10,11,12,13};  
    MyArray arr1(a,10);  
    MyArray arr2(b,10);  
    MyArray arr3(10);  
    cout<<arr3;  
    arr3 = arr1 +arr2;  
    cout<<arr3;  
    arr3.Resize(20);  
    cout<<arr3;  
    arr3.Resize(5);  
    cout<<arr3;  
    system("pause");  
    return 0;  
}   

上機感言:這周的任務感覺有難度,程序是看了別人的之後又自己寫的,就當是挑戰自己了!


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章