#include
using namespace std;
class student
{
static int total;
int score;
int *a;
public:
static int i;
static int count;
student();
~student();
void scoretotalcount(double);
static int sum(student c)
{
for (int i = 0; i < count; i++)
{
total = total + c.a[i];
}
return total;
}
static double average()
{
return double(total) / count;
}
};
int student::count = 0;
int student::total = 0;
int student::i = 0;
student::student()
{
cin >> count;
a = new int[count];
}
student::~student()
{
delete[]a;
}
void student::scoretotalcount(double s)
{
a[i] = s;
i++;
}
int main()
{
student c;
for (int i = 0; i < c.count; i++)
{
double s;
cin >> s;
c.scoretotalcount(s);
}
cout << c.sum(c) << endl;
cout << c.average() << endl;
}
你可以把 static int sum(student c) 这个函数的参数定义为 引用,即 static int sum(student & c) 。
构造函数中进行读取输入对count进行赋值,看不太懂,没这样用过,你单步调一下看看new成功了没?delete前判断下a!=NULL,我怎么感觉count为0。。。
delete[] a,你看你的代码里面有没有空格
这个问题比较隐蔽,是你定义的int指针有问题,或者说是当类具有指针成员时,最好要自己定义一个复制构造函数:
cout << c.sum(c) << endl;
这条语句调用后,int 指针已经被释放了,所以程序结束时调用析构函数,会重复释放同一块内存,导致错误。
这个类的结构好复杂,第一次见。。。。