请问在C++中如何实现像一下java中代码实现的功能public class Test{
int array[][] = null;
public void setValue(int a, int b){
if(array == null){
array = int[a][b];
}
} public int[] getValue(int index){
return array[index];
}
}

解决方案 »

  1.   


    #include<iostream>class Test{
    private:
    int** array;

    public:
        void setValue(int, int);
        int* getValue(int);
    ~Test();
    };void Test::setValue(int a, int b){
    if(array == 0){
    *array = new int[a];
    for(int i=0; i<a; i++) {
    array[i] = new int[b];
    }
    }
    }int* Test::getValue(int index) {
            return array[index];
    }
    Test::~Test() {
    //TODO delete array in for loop
    }
    int main()
    {
    Test t;
    t.setValue(2,2);
    }
      

  2.   

    C++的话,最好把各维长度也保存,否则转成指针以后就丢失长度信息了
    class Test{
        private:
            int** array;
            int asize;
            int bsize;...void Test::setValue(int a, int b){
        if(array == 0){
            asize = a;
            bsize = b;
            *array = new int[a];
            for(int i=0; i<a; i++) {
                array[i] = new int[b];
            }
        }
    }
      

  3.   

    判断好像是if(array == NULL)吧,记不住了
      

  4.   

    找个编译器,给你弄个无错的版本出来了#include<iostream>
    class Test{
    private:
    int** array;
    int len1;
    int len2;
    public:
    Test():array(NULL){};
        void setValue(int, int);
        int* getValue(int);
    ~Test();
    };void Test::setValue(int a, int b){
    if(array == NULL){
    int** tmp = new int*[a];
    for(int i=0; i<a; i++) {
    tmp[i] = new int[b];
    }
    array = tmp;
    this->len1 = a;
    this->len2 = b;
    }
    }int* Test::getValue(int index) {
            return array[index];
    }
    Test::~Test() {
    if(array != NULL) {
    for(int i=0; i<len1; i++) {
    delete[] array[i];
    }
    delete[] array;
    }
    }
    int main()
    {
    Test t;
    t.setValue(2,2);
    }
      

  5.   

    谢谢您的详细代码片段,我还有一个地方有点疑问,
    for(int i=0; i<a; i++) {
                tmp[i] = new int[b];
            }
    我要如何判断tmp[i]是否为空?
      

  6.   

    if (tmp[i] == NULL) 就可以判断tmp[i]指针是否为空了,如果要判断元素为空,就要自己循环
    for (j=0; j<b; j++) {
        if (tmp[i][j] != 0) {
            ...
        }
    }
    在这段例子代码中,一开始是 tmp = new int*[a];
    所以接下来的tmp[i]肯定是空,所以不用判断的
      

  7.   

    不好意思啊,最近忙,没有来csdn结贴。