外围元素之和怎么回事,哪里出了问题

img


/*(2)定义一个类Array, 它的数据成员和成员函数具体要求如下:
1)私有数据: 
int b[4][5];
int s;
2)公有成员函数:
Array(int t[][5]);//功能为二维数组b初始化
     void  sum();     // 功能为求二维数组b外围元素之和为s
     void  fun();    //对二维数组b按列前移
     void print();   //功能为以矩阵形式输出二维数组元素
     void prints();
3)用类定义对象array,并用对象array调用成员函数求出二维数组外围元素之和,按列前移,再求二维数组外围元素之和,输出二维数组元素。
*/
#include <iostream>
using namespace std;
class Array
{
private:
    int b[4][5 ];
    int s;         
public:
    Array(int t[][5]);
    void  sum();
    void  fun();
    void print();
    void prints();

};
Array::Array(int t[][5])
{
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            b[i][j] = t[i][j];
        }
    }
}

void Array::sum()
{
    s = 0;
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            
            if (i == 0 || i == 3 || j == 0 || j == 4)
            {
                s += b[i][j];
            }
        }
    }
}
void Array::fun()
{
    for (int i = 0; i < 4; i++)
    {
        int t = b[i][0];
        for (int j = 0; j <5-1; j++)
        {
            b[i][j] = b[i][j+1];
        }
        b[i][4] = t;

    }
}
void Array::print()
{
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            cout << b[i][j] << '\t';
        }
        cout << endl;
    }
}
void Array::prints()
{
    cout << s <<endl;
}
int main()
{
    int a[4][5] = { {1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5 } };
    Array arr(a);
    cout<<"遍历数组:" << endl;
    arr.print();
    cout << "外围元素之和:";
    arr.prints();
    arr.fun();
    cout << "左移后:" << endl;
    arr.print();
    return 0;
}
void Array::prints()
{
    sum(); 没有这一步,s就没有初始化。
    cout << s <<endl;
}