一个c++的问题题目代码如下,编译时是没有错误,但一运行就会出现如图的报错,麻烦各位大神们帮帮,谢谢
使用类和对象,建立一个简单的学生管理系统。具体要求:声明类保存学生的基本信息:数据成员(protected):姓名char*name;性别charsex;学号intnum...
使用类和对象,建立一个简单的学生管理系统。具体要求:
声明类保存学生的基本信息:
数据成员(protected):姓名 char * name;
性别 charsex;
学号 int num[10];
成绩 float score;
年龄 int age;
构造函数 Person(char * s, char g, int a 。。。。。。。);
提示:形参分别表示:姓名,性别,年龄等,三个形参均带缺省值0,函数体中注意name的动态内存分配问题。
拷贝构造函数 Person(Person&a);
提示:注意name要用深拷贝方法。
显示信息 voidDisplay();
提示:显示人员信息,输出占一行,次序分别是: 姓名 性别 年龄 。
设置信息 voidset(char *s, char g, int a。。。。。);
提示:形参分别表示:姓名,性别,年龄等,三个形参均带缺省值0。函数体中注意name的动态内存分配问题。
复制人员信息 void copy(Person &a);
提示:函数体与拷贝构造函数的类似,但要注意该函数与拷贝构造的区别。
完成类的定义,并编写主函数对其进行测试,要求每个成员函数均要测试到。
在此基础上,在主函数中定义对象数组,包含10个学生的信息,添加以下函数:
编写一个友元函数,用来比较两个学生的成绩高低,设为类的友元函数,调用此函数对数组中所有对象按照成绩从高到低排序,并求出最高分和最低分;
编写一个类的友元函数,输出成绩对应的等级:大于等于90:优;80~90:良;70~79:中;60!69:及格;小于60:不及格。
代码如下
#include<iostream>
#include<string>
using namespace std;
class Person
{
protected:
string name;//姓名
char sex;//性别
int num;//学号
int score;//成绩
int age;//年龄
public:
void set(string s ,char sex,int nu,int sc,int age);
Person(string na,char se,int nu,int sc,int ag);
friend int fu( int m,int n);
friend void qu(int p);
int getscore();
void display();
};
void qu(int p)//输出等级
{
switch(p/10)
{
case 10:
case 9:cout<<"优秀"<<endl;break;
case 8:cout<<"良好"<<endl;break;
case 7:cout<<"中等"<<endl;break;
case 6:cout<<"及格"<<endl;break;
default:cout<<"不及格"<<endl;
}
}
int Person::getscore()//返回每个对象的分数
{
return score;
}
int fu(int m,int n)//返回最高分
{
return (m>n? m:n);
}
void Person::display()//输出
{
cout<<"name"<<name<<"sex"<<sex<<"num"<<num<<"score"<<score<<"age"<<age<<endl;
}
void Person::set(string s ,char se,int nu,int sc,int ag)
{
name=s;
sex=se;
num=nu;
score=sc;
age=ag;
}
Person::Person(string na=0,char se=0,int nu=0,int sc=0,int ag=0)
{
name=na;
sex=se;
num=nu;
score=sc;
age=ag;
}
int main()
{
Person student[10];
int i;string name;int q;
char sex; int age,num;int score;
for(i=0;i<10;i++)
{
cout<<"请输入第"<<i+1<<"个学生的姓名 性别 学号 成绩 年龄"<<endl;
cin>>name>>sex>>num>>score>>age;
student[i].set(name,sex,num,score,age);
}
for(i=0,q=student[0].getscore();i<10;i++)//输出最高分的函数的调用
{
if(fu(q,student[i].getscore())>q)
{
q=fu(q,student[i].getscore());
}
}
for(i=0;i<10;i++)
{
qu(student[i].getscore());//输出等级的函数调用
}
for(i=0;i<10;i++)
student[i].display();
} 展开
声明类保存学生的基本信息:
数据成员(protected):姓名 char * name;
性别 charsex;
学号 int num[10];
成绩 float score;
年龄 int age;
构造函数 Person(char * s, char g, int a 。。。。。。。);
提示:形参分别表示:姓名,性别,年龄等,三个形参均带缺省值0,函数体中注意name的动态内存分配问题。
拷贝构造函数 Person(Person&a);
提示:注意name要用深拷贝方法。
显示信息 voidDisplay();
提示:显示人员信息,输出占一行,次序分别是: 姓名 性别 年龄 。
设置信息 voidset(char *s, char g, int a。。。。。);
提示:形参分别表示:姓名,性别,年龄等,三个形参均带缺省值0。函数体中注意name的动态内存分配问题。
复制人员信息 void copy(Person &a);
提示:函数体与拷贝构造函数的类似,但要注意该函数与拷贝构造的区别。
完成类的定义,并编写主函数对其进行测试,要求每个成员函数均要测试到。
在此基础上,在主函数中定义对象数组,包含10个学生的信息,添加以下函数:
编写一个友元函数,用来比较两个学生的成绩高低,设为类的友元函数,调用此函数对数组中所有对象按照成绩从高到低排序,并求出最高分和最低分;
编写一个类的友元函数,输出成绩对应的等级:大于等于90:优;80~90:良;70~79:中;60!69:及格;小于60:不及格。
代码如下
#include<iostream>
#include<string>
using namespace std;
class Person
{
protected:
string name;//姓名
char sex;//性别
int num;//学号
int score;//成绩
int age;//年龄
public:
void set(string s ,char sex,int nu,int sc,int age);
Person(string na,char se,int nu,int sc,int ag);
friend int fu( int m,int n);
friend void qu(int p);
int getscore();
void display();
};
void qu(int p)//输出等级
{
switch(p/10)
{
case 10:
case 9:cout<<"优秀"<<endl;break;
case 8:cout<<"良好"<<endl;break;
case 7:cout<<"中等"<<endl;break;
case 6:cout<<"及格"<<endl;break;
default:cout<<"不及格"<<endl;
}
}
int Person::getscore()//返回每个对象的分数
{
return score;
}
int fu(int m,int n)//返回最高分
{
return (m>n? m:n);
}
void Person::display()//输出
{
cout<<"name"<<name<<"sex"<<sex<<"num"<<num<<"score"<<score<<"age"<<age<<endl;
}
void Person::set(string s ,char se,int nu,int sc,int ag)
{
name=s;
sex=se;
num=nu;
score=sc;
age=ag;
}
Person::Person(string na=0,char se=0,int nu=0,int sc=0,int ag=0)
{
name=na;
sex=se;
num=nu;
score=sc;
age=ag;
}
int main()
{
Person student[10];
int i;string name;int q;
char sex; int age,num;int score;
for(i=0;i<10;i++)
{
cout<<"请输入第"<<i+1<<"个学生的姓名 性别 学号 成绩 年龄"<<endl;
cin>>name>>sex>>num>>score>>age;
student[i].set(name,sex,num,score,age);
}
for(i=0,q=student[0].getscore();i<10;i++)//输出最高分的函数的调用
{
if(fu(q,student[i].getscore())>q)
{
q=fu(q,student[i].getscore());
}
}
for(i=0;i<10;i++)
{
qu(student[i].getscore());//输出等级的函数调用
}
for(i=0;i<10;i++)
student[i].display();
} 展开
1个回答
展开全部
#include<iostream>
#include<string>
using namespace std;
class Person
{
protected:
string name;//姓名
char sex;//性别
int num;//学号
int score;//成绩
int age;//年龄
public:
void set(string s ,char sex,int nu,int sc,int age);
Person(string na="",char se=0,int nu=0,int sc=0,int ag=0);
friend int fu( int m,int n);
friend void qu(int p);
int getscore();
void display();
};
void qu(int p)//输出等级
{
switch(p/10)
{
case 10:
case 9:cout<<"优秀"<<endl;break;
case 8:cout<<"良好"<<endl;break;
case 7:cout<<"中等"<<endl;break;
case 6:cout<<"及格"<<endl;break;
default:cout<<"不及格"<<endl;
}
}
int Person::getscore()//返回每个对象的分数
{
return score;
}
int fu(int m,int n)//返回最高分
{
return (m>n? m:n);
}
void Person::display()//输出
{
cout<<"name"<<name<<"sex"<<sex<<"num"<<num<<"score"<<score<<"age"<<age<<endl;
}
void Person::set(string s ,char se,int nu,int sc,int ag)
{
name=s;
sex=se;
num=nu;
score=sc;
age=ag;
}
Person::Person(string na,char se,int nu,int sc,int ag)
{
name=na;
sex=se;
num=nu;
score=sc;
age=ag;
}
int main()
{
Person student[10];
int i;string name;int q;
char sex[2]; int age,num;int score;
for(i=0;i<10;i++)
{
cout<<"请输入第"<<i+1<<"个学生的姓名 性别 学号 成绩 年龄"<<endl;
cin>>name>>sex>>num>>score>>age;
student[i].set(name,sex[0],num,score,age);
}
for(i=0,q=student[0].getscore();i<10;i++)//输出最高分的函数的调用
{
if(fu(q,student[i].getscore())>q)
{
q=fu(q,student[i].getscore());
}
}
for(i=0;i<10;i++)
{
qu(student[i].getscore());//输出等级的函数调用
}
for(i=0;i<10;i++)
student[i].display();
return 0;
}
------------------------
一个比较严重的错误就是string初始化你用int值0赋值了,当然出错
还有一个输入的问题,cin一个char你可能会得到空格,用我这个保险一点。。
-------
还有一个建议,就是构造函数的默认值写在声明里好一点。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询