| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 805 人关注过本帖
标题:开辟动态对象并用构造函数赋值的问题不会了,求大家指教
只看楼主 加入收藏
红糖水
Rank: 2
等 级:论坛游民
帖 子:42
专家分:11
注 册:2013-2-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
开辟动态对象并用构造函数赋值的问题不会了,求大家指教
   
题目:
用动态对象数组实现一个简单的学生成绩管理系统。
    定义一个学生类,有姓名、学号、性别、四门功课(Math、English、C、Computer)和平均分等私有数据成员。
    用该学生类定义学生对象,学生信息由键盘输入;求出每个学生的平均分;然后显示每个学生的姓名、学号、四门课成绩和平均分。
要求:
    1. 用动态对象数组实现;
    2. 学生姓名的定义为:char *name;
    3. 用构造函数实现学生信息的初始化;
    4. 平均分的计算要用一个单独的函数实现;
    5. 请严格按照下面的格式进行输入输出。

我的代码:
#include<iostream>
#include<string>
using namespace std;
class date
{
    public:
    date();
    ~date();
    void showdate();
    void pjs(int math1,int english1,int c1,int computer1);
    private:
    char *name;
    int num;
    char sex;
    int math;
    int english;
    int c;
    int computer;
    int average;
};
date::date()
{
    char *name1=new char[80];
    int num1;
    char sex1;
    int math1;
    int english1;
    int c1;
    int computer1;
    int average1;
    cin>>name1>>num1>>sex1>>math1>>english1>>c1>>computer1;
    name=new char[strlen(name1)+1];
    strcpy(name,name1);
    num=num1;
    math=math1;
    english=english1;
    c=c1;
    computer=computer1;
    delete []name1;
    pjs(math1,english1,c1,computer1);
}
date::~date()
{
 delete []name;
}
void date::pjs(int math1,int english1,int c1,int computer1)
{average=(math1+english1+c1+computer1)/4;}
void date::showdate()
{
  cout<<name<<" "<<num<<" "<<sex<<" "<<math<<" "<<english<<" "<<c<<" "<<computer<<" "<<average<<endl;
}
int main()
{
    int n;
    cout<<"Please Input the Number of Students:"<<endl;
    date *student=new date[n];
    for(int i=0;i<5;i++)
    {
        
    }
    cout<<"Student Information:"<<endl;
    cout<<"Name  ID  Sex  Math  English  C  Computer  Average"<<endl;
    for(int i=0;i<5;i++)
    {
        student[i].showdate();
    }
    delete []student;
    return 0;
}
实现构造函数赋值的时候,也就是第一个FOR循环的语句不会写了。。。希望大家能教教我。。谢谢
搜索更多相关主题的帖子: 动态 English 
2013-04-11 11:48
zhuxiaoneng
Rank: 4
等 级:业余侠客
威 望:2
帖 子:51
专家分:215
注 册:2013-4-10
收藏
得分:7 
第一个FOR循环时不需要的
date *student=new date[n]; 这句就是得到了n个学生对象,输入相应数值即可
ps:你的n没有赋值
需要加上:
cin >> n;

后面循环结束的条件也是:
 for(int i=0;i<n;i++)
2013-04-11 12:42
红糖水
Rank: 2
等 级:论坛游民
帖 子:42
专家分:11
注 册:2013-2-3
收藏
得分:0 
以下是引用zhuxiaoneng在2013-4-11 12:42:34的发言:

第一个FOR循环时不需要的
date *student=new date[n]; 这句就是得到了n个学生对象,输入相应数值即可
ps:你的n没有赋值
需要加上:
cin >> n;
 
后面循环结束的条件也是:
 for(int i=0;i
这个我知道,我想问的是,怎么把输入的值初始给类里的对象。。。开辟完动态对象组,我就不会赋值了
2013-04-11 13:34
zhuxiaoneng
Rank: 4
等 级:业余侠客
威 望:2
帖 子:51
专家分:215
注 册:2013-4-10
收藏
得分:0 
date::date()这个函数里面有赋值操作啊
你在弹出的控制台界面上输入相应的值就可以了
cin>>name1>>num1>>sex1>>math1>>english1>>c1>>computer1;
比如
xiaobai 123 m 80 90 90 90
然后回车
2013-04-11 13:44
子楠
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:111
专家分:164
注 册:2013-4-9
收藏
得分:7 
char *sex 或sex[8];
后面再改一下输出
还有求平均改成这样:
void date::pjs()
{average=(math+english+c+computer)/4;}
在一个构造函数光初始化就行了,不要在那里面输入;
额外定义一个set函数用来输入数据
2013-04-11 17:18
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:7 
构造函数用来处理对象初始化的,它是一种特殊的成员函数,不需要用户调用它就可以在建立对象时自动执行,构造函数的初始化也不用for循环吧!直接在类声明的时候就可以进行初始话了,你还写在主函数当中,大可不必要,直接在类中就可以了,构造函数的可以用参数化类表进行,也可直接赋值,如下:
class Time
{
   public:
   Time()
   {
        hour=0;
        minute=0;
       sec=0;
    }
private:
  int hour;
  int minute;
   int sec;
}

Maybe
2013-04-11 21:41
红糖水
Rank: 2
等 级:论坛游民
帖 子:42
专家分:11
注 册:2013-2-3
收藏
得分:0 
#include<iostream>
using namespace std;
class date
{
    public:
    date();
    ~date();
    void showdate();
    void pjs(int math1,int english1,int c1,int computer1);
    private:
    char *name;
    int num;
    char sex;
    int math;
    int english;
    int c;
    int computer;
    int average;
};
date::date()
{
    cin>>name>>num>>sex>>math>>english>>c>>computer;
    pjs(math,english,c,computer);
}
date::~date()
{
 delete []name;
}
void date::pjs(int math,int english,int c,int computer)
{average=(math+english+c+computer)/4;}
void date::showdate()
{
  cout<<name<<" "<<num<<" "<<sex<<" "<<math<<" "<<english<<" "<<c<<" "<<computer<<" "<<average<<endl;
}
int main()
{
    int n;
    cout<<"Please Input the Number of Students:"<<endl;
    cin>>n;
    cout<<"Please input "<<n<<" student info: Name  ID  Sex  Math  English  C  Computer"<<endl;
    date *student=new date[n];
    cout<<endl<<"Student Information:"<<endl;
    cout<<"Name  ID  Sex  Math  English  C  Computer  Average"<<endl;
    for(int i=0;i<5;i++)
    {
        student[i].showdate();
    }
    delete []student;
    return 0;
}
这是我改完的代码,可惜出现了内存错误,但是输出结果都是正确的,不知道还有什么问题了
2013-04-11 22:00
zhuxiaoneng
Rank: 4
等 级:业余侠客
威 望:2
帖 子:51
专家分:215
注 册:2013-4-10
收藏
得分:0 
date::date()
{
    cin>>name>>num>>sex>>math>>english>>c>>computer;
    pjs(math,english,c,computer);
}

这个函数里面 name没有申请内存,临时策略
date::date()
{
    name = new char[80];
    cin>>name>>num>>sex>>math>>english>>c>>computer;
    pjs(math,english,c,computer);
}
最好还是使用c++里面的string
2013-04-12 02:48
红糖水
Rank: 2
等 级:论坛游民
帖 子:42
专家分:11
注 册:2013-2-3
收藏
得分:0 
以下是引用zhuxiaoneng在2013-4-12 02:48:13的发言:

date::date()
{
    cin>>name>>num>>sex>>math>>english>>c>>computer;
    pjs(math,english,c,computer);
}
 
这个函数里面 name没有申请内存,临时策略
date::date()
{
    name = new char[80];
    cin>>name>>num>>sex>>math>>english>>c>>computer;
    pjs(math,english,c,computer);
}
最好还是使用c++里面的string
可是题目要求是用 char *name,我也想用string 啊。。。
2013-04-12 07:32
红糖水
Rank: 2
等 级:论坛游民
帖 子:42
专家分:11
注 册:2013-2-3
收藏
得分:0 
问题已解决,是访问了非法的内存,我用机器码对照找到了溢出的内存地址,然后改正了
2013-04-13 21:20
快速回复:开辟动态对象并用构造函数赋值的问题不会了,求大家指教
数据加载中...
 
   



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

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