标题:C++里面析构函数的问题!!!
只看楼主
keep_on
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2012-10-31
 问题点数:0 回复次数:5 
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();
}
为什么最后运行的结果还是有问题?而去掉了析构函数就可以了,这是为什么?能不能不去掉析构函数将这个程序运行出来?求高手!!!
搜索更多相关主题的帖子: double public void 
2012-11-17 12:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
我先劝你换个老师,从题目上就看出你这个老师水平偏得有多离谱

言归正传,你定义了 Stud a[20];,但如果没全部用到,没用到的那部分的no和name值就是无意义的,在析构时delete[]出错。
加个缺省构造函数
  Stud() : no(0), name(0)
  {
  }
2012-11-17 12:36
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
得分:0 
哥们析构函数怎么那么写,且不说让你加上异常处理了,最起码加上基本判断吧!
程序代码:
Stud::~Stud()
{
     if(no)
        delete []no;
     if(name)
        delete []name;
}

在修改一下试试吧,这不是主要问题

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2012-11-17 18:03
keep_on
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2012-10-31
得分:0 
回复 2楼 rjsp
谢谢!!!,我们还是刚学C++,所以学的不是很多,可能那部分老师忘了讲了。
2012-11-18 09:46
keep_on
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2012-10-31
得分:0 
回复 3楼 liufashuai
这个样子我试了,不行,2楼的方法是对的,不过还是谢谢
2012-11-18 09:47
wcyun_11
Rank: 1
等 级:新手上路
帖 子:3
专家分:7
注 册:2012-11-18
得分:0 
我也是菜鸟,213961554 C++交流群一起学习
2012-11-18 16:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-387356-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.077948 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved