C++里面析构函数的问题!!!
class Stud{
char *no;
char *name;
double deg;
static double sum;
static int num;
public:
void setdata(char *,char *,double );
void disp();
static double avg();
~Stud();
};
/*1. 设计一个学生类Stud,包括学号(no)、姓名(name)、和成绩(deg)数据成员,两个静态变量sum和num,
分别存放总分和人数,另有两个普通成员函数setdata()和disp(),分别用于赋值和输出成员数据,
另有一个静态成员函数avg(),它用于计算平均分。在main()函数中定义一个对象数组用于存储输入的学生数据,
要求输出这些学生数据并计算平均分。*/
#include<iostream.h>
#include"Stud.h"
#include<string.h>
void Stud::setdata(char *x,char *y,double d)
{
no=new char[strlen(x)+1];
strcpy(no,x);
name=new char[strlen(y)+1];
strcpy(name,y);
deg=d;
sum+=deg;
num++;
}
void Stud::disp()
{
cout<<no<<'\t'<<name<<'\t'<<deg<<endl;
}
Stud::~Stud()
{
delete []no;
delete []name;
}
double Stud::sum=0;
int Stud::num=0;
double Stud::avg()
{
cout<<"这"<<num<<"个同学的平均分是:"<<sum/num<<endl;
return sum/num;
}
void main()
{
int i=0,j;
Stud a[20];
char num[30],name[20];
double score;
cout<<"请输入学生的学号、姓名和成绩(以'@'结束)。\n";
while (1)
{
cin>>num;
if (num[0]=='@')
break;
cin>>name>>score;
a[i++].setdata(num,name,score);
}
cout<<" 学号"<<'\t'<<"姓名"<<'\t'<<"成绩"<<endl;
for (j=0;j<i;j++)
a[j].disp();
Stud::avg();
}
为什么最后运行的结果还是有问题?而去掉了析构函数就可以了,这是为什么?能不能不去掉析构函数将这个程序运行出来?求高手!!!