kowala's home

kowala's home
這裡是我的學習筆記,陸續增加中。
http://kowala21.blogspot.com

2011-10-11

Dev C++ 物件化的資料存取-動態二維陣列物件

資料存取物件化

kowala's home
http://kowala21.blogspot.com

這裡使用Dev C++ 來製作動態二維陣列物件,通常在使用陣列時,常常會被指標搞的暈頭轉向,但是使用陣列用來儲存資料,卻又是必須的工具,如何避免被複雜的指標干擾寫作程式,使用物件的觀念卻是必要的,把底層複雜運算封裝起來,上層就可以單純的存取,這對於大型程式開發,是很重要的觀念。

底下程式是先製作一個動態二維陣列物件,然後實作,存取測試,完整程式碼如下:
本篇是使用 C++ 語法



#include <cstdlib>
#include <iostream>

using namespace std;
/*******************************************************************
2D Array Object
2011-10-11kowala's home  http://kowala21.blogspot.com
ref: http://www.programmer-club.com.tw/ShowSameTitleN/c/37868.html   
********************************************************************/
typedef int* array;
class SrcData{
    array *matrix;
    int m_rows;
    int m_cols;
    public:
    SrcData();
    void initData(int row,int col,int var);
    void relaxData();
    void dumpData();
    void setData(int row,int col,int var);
    int getData(int row,int col);
};

int main(int argc, char *argv[]){
    system("cls");
    int row=3,col=7;
    SrcData sd;
   
    cout << "initial array by -1 ..." << endl;
    sd.initData(row,col,-1);
    sd.dumpData();
   
    cout << "set value to array..." << endl;
    sd.setData(0,1,1);
    sd.setData(0,2,2);
    sd.setData(0,3,3);
    sd.setData(1,2,4);
    sd.setData(1,3,5);
    sd.setData(1,4,6);
    sd.setData(2,3,7);
    sd.setData(2,4,8);
    sd.setData(2,5,9);
    sd.dumpData();
   
    cout << "get value from array..." << endl;
    cout << "[0,1]=" << sd.getData(0,1) << endl;
    cout << "[1,2]=" << sd.getData(1,2) << endl;
    cout << "[2,3]=" << sd.getData(2,3) << endl;
   
    sd.relaxData();   
   
    system("PAUSE");
    return EXIT_SUCCESS;
}
//--------------------------------------------------
//建構子
SrcData::SrcData(){    m_rows=1;m_cols=2;}
//設定參數
void SrcData::setData(int row,int col,int var){    matrix[row][col]=var;}
//取出參數
int SrcData::getData(int row,int col){    return matrix[row][col];}
//初始化陣列
void SrcData::initData(int row,int col,int var){
    m_rows=row;m_cols=col;
    SrcData::matrix=new array[m_rows];
    for(int i=0;i<m_rows;i++){
        SrcData::matrix[i]=new int[m_cols];
        for(int j=0;j<m_cols;j++){
            SrcData::matrix[i][j]=var;
        }
    }
}
//釋放陣列
void SrcData::relaxData(){
    for(int i=0;i<m_rows;i++){
        delete [] SrcData::matrix[i];       
    }
    delete [] SrcData::matrix;
}
//傾印資料
void SrcData::dumpData(){
    cout << "rows=" << m_rows << ",cols=" << m_cols << endl;
    for(int i=0;i<m_rows;i++){       
        for(int j=0;j<m_cols;j++){           
            cout << "[" << i << "," << j << "]=" << SrcData::matrix[i][j] << "  ";
        }
        cout << endl;
    }
    cout << endl;
}

執行結果如下圖




參考資料:
1.如何傳遞動態的二維陣列給函式 doggie (franklin)
http://www.programmer-club.com.tw/ShowSameTitleN/c/37868.html
2.C++教學(二十八):在參數列傳遞陣列 大頭嬰
http://www.hala.bz/read.php?tid=7138

沒有留言:

張貼留言

請提供您的寶貴意見 ;-)