C++的一个问题如图可视

问题遇到的现象和发生背景

在dynamicArray类的基础上设计一个二维数组派生类,class dynamicArray2D

问题相关代码,请勿粘贴截图
#include <iostream>

#include <iomanip>



using namespace std;

class myArray{

 public: 

 virtual void showArray() const = 0;

};

class dynamicArray : public myArray{

 public:

 dynamicArray();

 dynamicArray(int * const, int);

 dynamicArray(const dynamicArray &);

 ~dynamicArray();

 void showArray() const;

 int operator [](int);

 private:

 int *array;

 int length;

 friend ostream& operator << (ostream& os, const dynamicArray &);

 static const int INC;

};

const int dynamicArray :: INC = 8;

dynamicArray :: dynamicArray()

{

 array = new int[INC];

 length = INC;

}

dynamicArray :: dynamicArray(int * const p, int len)

{

 length = INC;

 while(len > this->length)

 length = length + INC;

 array = new int[length]();

 for(int i = 0; i < len; i++)

  array[i] = p[i];

} 

dynamicArray :: dynamicArray(const dynamicArray &source)

{

 this -> length = source.length;

 this -> array = new int[length];

 for(int i = 0; i < length; i++)

 array[i] = source.array[i];

}

dynamicArray :: ~dynamicArray()

{

 delete array;

} 



int dynamicArray :: operator [](int i)

{

 return array[i];

} 

void dynamicArray :: showArray() const

{

 for (int i = 0; i < length; i++){

 cout << setw(6) << array[i] ;

 if(( i + 1) % 10 == 0)

 cout << endl;

 };

 

}

ostream& operator << (ostream& os, dynamicArray& obj) >>

{

 obj.showArray();

 return os << endl;

}

我的解答思路和尝试过的方法

顺带说一下设计思想吗。

我想要达到的结果

要有以下成员函数

dynamicArray2D();

dynamicArray2D(int * const, int col, int vol); //col为行数, vol为列数

dynamicArray2D(const dynamicArray &);

~dynamicArray();

void showArray() const; // 以行列形式输出一个二维数组

重载运算符 <<以行列形式输出一个二维数组

题目有错误,
dynamicArray2D(const dynamicArray &);
~dynamicArray();
这两个都写错了,应该是
dynamicArray2D(const dynamicArray2D&);
~dynamicArray2D();


dynamicArray2D类代码如下:


class dynamicArray2D :public dynamicArray {
public:
    dynamicArray2D();

    dynamicArray2D(int* const, int col, int vol); //col为行数, vol为列数

    dynamicArray2D(const dynamicArray2D&);

    ~dynamicArray2D();

    void showArray() const; // 以行列形式输出一个二维数组

    friend ostream& operator << (ostream& os, dynamicArray2D& obj);

private:
    int** mArray;
    int mRol, mCol;
    static const int INC;
};

const int dynamicArray2D::INC = 8;

dynamicArray2D::dynamicArray2D()
{
    mArray = new int* [INC];
    for (int i = 0; i < INC; i++)
        mArray[i] = new int[INC];
    mRol = INC;
    mCol = INC;
}
//col为行数, vol为列数
dynamicArray2D::dynamicArray2D(int* const p, int col, int vol) 
{
    int i, j, k=0;
    mArray = new int*[col];
    for (i = 0; i < col; i++)
        mArray[i] = new int[vol];
    mRol = col;
    mCol = vol; 
    for (i = 0; i < col; i++)
    {
        for (j = 0; j < vol; j++)
        {
            mArray[i][j] = p[k];
            k++;
        }
    }
}

dynamicArray2D::dynamicArray2D(const dynamicArray2D& p)
{
    this->mRol = p.mRol;
    this->mCol = p.mCol;

    this->mArray = new int* [mRol];
    for (int i = 0; i < mRol; i++)
    {
        mArray[i] = new int[mCol];
        for (int j = 0; j < mCol; j++)
        {
            mArray[i][j] = p.mArray[i][j];
        }
    }
}
dynamicArray2D::~dynamicArray2D()
{
    for (int i = 0; i < mRol; i++)
    {
        delete[] mArray[i];
        mArray[i] = 0;
    }
    delete[] mArray;
    mArray = 0;

}

void dynamicArray2D::showArray() const
{
    int i, j;
    for (i = 0; i < mRol; i++)
    {
        for (j = 0; j < mCol; j++)
            cout << setw(6) << mArray[i][j] ;
        cout << endl;
    }
}

ostream& operator << (ostream& os, dynamicArray2D& obj)
{
    int i, j;
    for (i = 0; i < obj.mRol; i++)
    {
        for (j = 0; j < obj.mCol; j++)
            os << setw(6) << obj.mArray[i][j];
        os << endl;
    }
    return os;
}

完整代码如下:

#include <iostream>
#include <iomanip>
using namespace std;

class myArray {
public:
    virtual void showArray() const = 0;
};

class dynamicArray : public myArray {
public:
    dynamicArray();
    dynamicArray(int* const, int);
    dynamicArray(const dynamicArray&);
    ~dynamicArray();
    void showArray() const;
    int operator [](int);
private:
    int* array;
    int length;
    friend ostream& operator << (ostream& os, const dynamicArray&);
    static const int INC;
};
const int dynamicArray::INC = 8;

dynamicArray::dynamicArray()
{
    array = new int[INC];
    length = INC;
}

dynamicArray::dynamicArray(int* const p, int len)
{
    length = INC;
    while (len > this->length)
        length = length + INC;

    array = new int[length]();
    for (int i = 0; i < len; i++)
        array[i] = p[i];
}

dynamicArray::dynamicArray(const dynamicArray& source)
{
    this->length = source.length;
    this->array = new int[length];
    for (int i = 0; i < length; i++)
        array[i] = source.array[i];
}

dynamicArray :: ~dynamicArray()
{
    delete array;
}


int dynamicArray :: operator [](int i)
{
    return array[i];
}

void dynamicArray::showArray() const
{
    for (int i = 0; i < length; i++) {
        cout << setw(6) << array[i];
        if ((i + 1) % 10 == 0)
            cout << endl;
    };
}

ostream& operator << (ostream& os, dynamicArray& obj) 
{
    obj.showArray();
    return os << endl;
}


class dynamicArray2D :public dynamicArray {
public:
    dynamicArray2D();

    dynamicArray2D(int* const, int col, int vol); //col为行数, vol为列数

    dynamicArray2D(const dynamicArray2D&);

    ~dynamicArray2D();

    void showArray() const; // 以行列形式输出一个二维数组

    friend ostream& operator << (ostream& os, dynamicArray2D& obj);

private:
    int** mArray;
    int mRol, mCol;
    static const int INC;
};

const int dynamicArray2D::INC = 8;

dynamicArray2D::dynamicArray2D()
{
    mArray = new int* [INC];
    for (int i = 0; i < INC; i++)
        mArray[i] = new int[INC];
    mRol = INC;
    mCol = INC;
}
//col为行数, vol为列数
dynamicArray2D::dynamicArray2D(int* const p, int col, int vol) 
{
    int i, j, k=0;
    mArray = new int*[col];
    for (i = 0; i < col; i++)
        mArray[i] = new int[vol];
    mRol = col;
    mCol = vol; 
    for (i = 0; i < col; i++)
    {
        for (j = 0; j < vol; j++)
        {
            mArray[i][j] = p[k];
            k++;
        }
    }
}

dynamicArray2D::dynamicArray2D(const dynamicArray2D& p)
{
    this->mRol = p.mRol;
    this->mCol = p.mCol;

    this->mArray = new int* [mRol];
    for (int i = 0; i < mRol; i++)
    {
        mArray[i] = new int[mCol];
        for (int j = 0; j < mCol; j++)
        {
            mArray[i][j] = p.mArray[i][j];
        }
    }
}
dynamicArray2D::~dynamicArray2D()
{
    for (int i = 0; i < mRol; i++)
    {
        delete[] mArray[i];
        mArray[i] = 0;
    }
    delete[] mArray;
    mArray = 0;

}

void dynamicArray2D::showArray() const
{
    int i, j;
    for (i = 0; i < mRol; i++)
    {
        for (j = 0; j < mCol; j++)
            cout << setw(6) << mArray[i][j] ;
        cout << endl;
    }
}

ostream& operator << (ostream& os, dynamicArray2D& obj)
{
    int i, j;
    for (i = 0; i < obj.mRol; i++)
    {
        for (j = 0; j < obj.mCol; j++)
            os << setw(6) << obj.mArray[i][j];
        os << endl;
    }
    return os;
}


hxd,懂了🌝