注册 登录
编程论坛 C++教室

大家帮我看下,没有错但运行无法输入

px200 发布于 2013-04-16 08:58, 648 次点击
#include<iostream>
#include<string>
using namespace std;
class Date{
public:
    Date();
    Date(char *name,int ID,char Sex,int Math,int English,int C,int Computer);
    void showstudent();
    void aver(int Average,int Math,int English,int C,int Computer);
private:
    char *name;
    int ID;
    char Sex;
    int Math;
    int English;
    int C;
    int Computer;
    int Average;
   
};
Date::Date(char *name,int ID,char Sex,int Math,int English,int C,int Computer)
{
 name=new char[10];
     cin>>name>>ID>>Sex>>Math>>English>>C>>Computer;
     aver(Average,Math,English,C,Computer);
 delete []name;
}
Date::Date()
{}
void Date::showstudent()
{cout<<name<<"  "<<ID<<"  "<<Sex<<"  "<<Math<<"  "<<English<<"  "<<C<<"  "<<Computer<<" "<<Average<<endl;}
void Date::aver(int Average,int Math,int English,int C,int Computer)
{
    Average=(Math+English+C+Computer)/4;
}

int main()
{
    int q;
    cout<<"Please Input the Number of Students:"<<endl;
    cin>>q;
    cout<<"Please input"<<" "<<q<<" "<<"student info: Name  ID  Sex  Math  English  C  Computer"<<endl;
    Date *stu=new Date[q];
    cout<<endl<<"Student Information you input:"<<endl;
    cout<<"Name  ID  Sex  Math  English  C  Computer  Average"<<endl;
    for(int i=0;i<4;i++)
    {
        stu[i].showstudent();
    }
    delete []stu;
    return 0;
}
9 回复
#2
aoguren2013-04-16 11:27
函数设计的也不合理。

Date *stu=new Date[q];
cout<<endl<<"Student Information you input:"<<endl;
cout<<"Name  ID  Sex  Math  English  C  Computer  Average"<<endl;
做完后面,你的Date::Date(char *name,int ID,char Sex,int Math,int English,int C,int Computer)构造函数不会执行,
而是会执行Date();

然后 到后面 for(int i=0;i<4;i++)
    {
        stu[i].showstudent();
    }
就执行不了,所以会报错。
#3
px2002013-04-16 15:27
回复 2楼 aoguren
怎么改一下,让构造函数执行?
#4
子楠2013-04-16 17:33
#include<iostream>
#include<string>
using namespace std;
class Date{
public:
    Date();
    void set(char *na,int id,char *ss,int ma,int en,int cc,int co);
    void showstudent();
    void aver();
private:
    char *name;
    int ID;
    char *Sex;
    int Math;
    int English;
    int C;
    int Computer;
    double Average;
   
};
void Date::set(char *na,int id,char *ss,int ma,int en,int cc,int co)
{   
    strcpy(name,na);
    strcpy(Sex,ss);
    ID=id;
    Sex=ss;
    Math=ma;
    English=en;
    C=cc;
    Computer=co;
}
Date::Date()
{
    name=new char[10];
    Sex=new char[10];
}
void Date::showstudent()
{ cout<<name<<"  "<<ID<<"  "<<Sex<<"  "<<Math<<"  "<<English<<"  "<<C<<"  "<<Computer<<"  "<<Average<<endl;}
void Date::aver()
{
      Average=(Math+English+C+Computer)/4;
}

int main()
{
    int i,q,id,ma,en,cc,co;
    char *na,*ss;
    cout<<"Please Input the Number of Students:"<<endl;
    cin>>q;
    Date *stu=new Date[q];
   
    for(i=0;i<q;i++)
    {    cout<<"请输入信息"<<endl;
        cin>>na>>id>>ss>>ma>>en>>cc>>co;
        stu[i].set(na,id,ss,ma,en,cc,co);
    }
    for(i=0;i<q;i++)
    {    stu[i].aver();
        stu[i].showstudent();
    }
    delete []stu;
    return 0;
}
好了,可以

[ 本帖最后由 子楠 于 2013-4-16 18:00 编辑 ]
#5
邓士林2013-04-16 21:15
回复 3楼 px200
你的概念还不是很牢固哦!构造函数不需要你去调用,构造函数的作用是处理对象初始化,构造函数在建立对象时自动执行,但是构造函数的名字必须和类名一样。
#6
px2002013-04-16 21:53
回复 5楼 邓士林
那我那个应该怎么改啊? 真不会了
#7
px2002013-04-16 21:55
回复 4楼 子楠
谢谢 但这个只能初始化一个对象,最好用构造函数对对象进行初始化。
#8
子楠2013-04-17 21:56
回复 7楼 px200
在main函数中我用了个循环对n个对象初始化呀
#9
zhuxiaoneng2013-04-18 09:32
已经在你的另外一个帖子里,给你修改了
#10
马小柯2013-04-18 15:13
#include<iostream>
 #include<string>
 using namespace std;
 class Date{
 public:
     Date();
     Date(char *name,int x,string y,int m,int e,int c,int co);
     void setdate();
     void showstudent();
     void aver();
 private:
     string Name;
     int ID;
     string Sex;
     int Math;
     int English;
     int C;
     int Computer;
     double Average;
     
};
 void Date::setdate()
 {
 //Name=new char[10];
 cin>>Name>>ID>>Sex>>Math>>English>>C>>Computer;
 }
 Date::Date()
 {}
 void Date::showstudent()
 {cout<<Name<<"  "<<ID<<"  "<<Sex<<"  "<<Math<<"  "<<English<<"  "<<C<<"  "<<Computer<<" "<<Average<<endl;}
 void Date::aver()
 {
     Average=(Math+English+C+Computer)/4.0;
 }
 Date::Date(char *name,int x,string y,int m,int e,int c,int z)
 {
     Name=name;
     ID=x;
     Sex=y;
     Math=m;
     English=e;
     C=c;
     Computer=z;
 }
int main()
 {
     int q;
     cout<<"Please Input the Number of Students:"<<endl;
     cin>>q;
     cout<<"Please input"<<" "<<q<<" "<<"student info: Name  ID  Sex  Math  English  C  Computer"<<endl;
     Date *stu=new Date[q];
     for(int j=0;j<q;j++)
     {
         stu[j].setdate();
         stu[j].aver();
     }
     cout<<endl<<"Student Information you input:"<<endl;
     cout<<"Name  ID  Sex  Math  English  C  Computer  Average"<<endl;
     for(int i=0;i<q;i++)
     {
         stu[i].showstudent();
     }
     delete stu;
     return 0;
 }
 
1