天天看點

第九周C++實驗報告(四)

[cpp]  view plain copy

  1. #include <iostream>    
  2. using namespace std;    
  3. class Douary    
  4. {    
  5. public:    
  6.     Douary(int m, int n);//構造函數:用于建立動态數組存放m行n列的二維數組(矩陣)元素,并将該數組元素初始化為    
  7.     Douary(const Douary &d);//構造函數:用于建立動态數組存放m行n列的二維數組(矩陣)元素,并将該數組元素初始化為    
  8.     ~Douary(); //析構函數:用于釋放動态數組所占用的存儲空間    
  9.     friend istream &operator>>(istream &input, Douary &d);//重載運算符“>>”輸入二維數組,其中d為Dousry類對象;    
  10.     friend ostream &operator<<(ostream &output, Douary &d);//重載運算符“<<”以m行n列矩陣的形式輸出二維數組,其中d為Douary類對象。    
  11.     friend Douary operator+(const Douary &d1,const Douary &d2);//兩個矩陣相加,規則:對應位置上的元素相加    
  12.     friend Douary operator-(const Douary &d1,const Douary &d2);//兩個矩陣相減,規則:對應位置上的元素相減    
  13.     bool operator==(const Douary &d);//判斷兩個矩陣是否相等,即對應位置上的所有元素是否相等    
  14. private:    
  15.     int * Array;      //Array 為動态數組指針。    
  16.     int row;          //row  為二維數組的行數。    
  17.     int col;          //col   為二維數組的列數。    
  18. };    
  19. Douary::Douary(int m, int n) //構造函數:用于建立動态數組存放m行n列的二維數組(矩陣)元素,并将該數組元素初始化為    
  20. {    
  21.     row=m;    
  22.     col=n;    
  23.     Array = new int[m*n];     
  24.     for(int i=0; i<row; ++i)    
  25.         for(int j=0; j<col; ++j)    
  26.             Array[i*col+j]=0;      
  27. }    
  28. Douary::Douary(const Douary &d)    
  29. {    
  30.     row=d.row;    
  31.     col=d.col;    
  32.     Array = new int[row*col];    
  33.     for(int i=0; i<row; ++i)    
  34.         for(int j=0; j<col; ++j)    
  35.             Array[i*col+j]=d.Array[i*col+j];     
  36. }    
  37. Douary::~Douary() //析構函數:用于釋放動态數組所占用的存儲空間    
  38. {    
  39.     delete [] Array;    
  40. }    
  41. istream &operator>>(istream &input, Douary &d)//重載運算符“>>”輸入二維數組    
  42. {    
  43.     for(int i=0; i<d.row; ++i)    
  44.         for(int j=0; j<d.col; ++j)    
  45.             cin>>d.Array[i*d.col+j];//注意位址求法    
  46.     return input;    
  47. }    
  48. ostream &operator<<(ostream &output, Douary &d)//重載運算符“<<”以m行n列矩陣的形式輸出二維數組   
  49. {    
  50.     for(int i=0; i<d.row; ++i)    
  51.     {    
  52.         for(int j=0; j<d.col; ++j)    
  53.             cout<<d.Array[i*d.col+j]<<"\t";     
  54.         cout<<endl;    
  55.     }    
  56.     cout<<endl;    
  57.     return output;    
  58. }    
  59. Douary operator+(const Douary &d1,const Douary &d2)//兩個矩陣相加    
  60. {    
  61.     Douary d(d1.row,d1.col);    
  62.     for(int i=0; i<d1.row; ++i)    
  63.     {    
  64.         for(int j=0; j<d1.col; ++j)    
  65.             d.Array[i*d1.col+j]=d1.Array[i*d1.col+j]+d2.Array[i*d1.col+j];    
  66.     }    
  67.     return d;    
  68. }    
  69. Douary operator-(const Douary &d1,const Douary &d2)//兩個矩陣相減    
  70. {    
  71.     Douary d(d1.row,d1.col);    
  72.     for(int i=0; i<d1.row; ++i)    
  73.     {    
  74.         for(int j=0; j<d1.col; ++j)    
  75.             d.Array[i*d1.col+j]=d1.Array[i*d1.col+j]-d2.Array[i*d1.col+j];    
  76.     }    
  77.     return d;    
  78. }    
  79. bool Douary::operator ==(const Douary &d)//判斷兩個矩陣是否相等    
  80. {    
  81.     if(row!=d.row||col!=d.col) return false;    
  82.     bool eq = true;    
  83.     for(int i=0; i<row; ++i)    
  84.     {    
  85.         for(int j=0; j<col; ++j)    
  86.             if (Array[i*col+j]!=d.Array[i*col+j])     
  87.             {    
  88.                 eq=false;    
  89.                 break;    
  90.             }    
  91.             if (!eq) break;    
  92.     }    
  93.     return eq;    
  94. }    
  95. int main()    
  96. {    
  97.     Douary d1(2,3),d2(2,3);    
  98.     cout<<"輸入d1(2,3):"<<endl;    
  99.     cin>>d1;    
  100.     cout<<"輸入d2(2,3):"<<endl;    
  101.     cin>>d2;    
  102.     cout<<"d1="<<endl;    
  103.     cout<<d1;    
  104.     cout<<"d2="<<endl;    
  105.     cout<<d2;    
  106.     cout<<"d1+d2="<<endl;    
  107.     Douary d3=(d1+d2);    
  108.     cout<<d3;    
  109.     cout<<"d1-d2="<<endl;    
  110.     cout<<(d1-d2);    
  111.     cout<<"d1"<<((d1==d2)?"==":"!=")<<"d2"<<endl;    
  112.     system("pause");    
  113.     return 0;    
  114. }     
  115. 第九周C++實驗報告(四)

繼續閱讀