c++语言程序题 需完整答案

这是完整的题目截图,六小时截止,希望得到各位的帮助,谢谢大家

img

img

img

你的题目有错误,拷贝构造函数的参数和析构函数名都写错了。
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;
}