关于对象数组的问题
#include<iostream>#include<string>
using namespace std;
class student
{
public:
student(string i=0,float r=0):id(i),result(r){}//构造函数
void in()
{
cout<<"请输入学号"<<endl;
cin>>this->id;
cout<<"请输入成绩"<<endl;
cin>>this->result;
}
void printf()
{
cout<<"学号:"<<this->id<<endl;
cout<<"成绩:"<<this->result<<endl;
}
float result;
private:
string id;
};
void paixu(student a[],int n)
{
student temp;
int i=0,j=0;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(a.result<a.result)
{
temp=a;
a=a;
a=temp;
}
}
}
}
int main()
{
int i=0;
student a={student("56",2),student("26",4.2),student("26",56),student("23",32),
student("626",65),student("626",54),student("25",88),student("51",1),
student("62",7),student("125",11)};
//paixu(a,10);
for(i=0;i<10;i=i+1)
{cout<<"排名第"<<i+1<<"的学生数据为:"<<endl;
a.printf();
}
return 0;
}
// 当我调用“paixu”函数,把初始化的数组地址传递过去之后就出错了,我搞不懂原因是什么,难道是因为这样子初始化之后数组变成常量了吗
看懂的话,还请给个最佳答案 你的构造函数有瑕疵,student(string i=0,float r=0):id(i),result(r){},i是一个string类型,默认值不能是0,这就使得i不能没有输入值,否则就会报错。
下面是string的定义方法:
string a(NULL);//错误用法
string b = NULL;//错误用法
string a("");//正确用法
string b = "";//正确用法
string c;//正确用法
你写的string i=0,是不对滴
当你在paixu函数中定义一个student temp的时候,完全没有给任何值,进行构造的时候,就会使用i的默认值进行构造,这是就会触发那个隐患
排除该隐患的方法有两种:
1、写两个构造函数,一个是带参的(参数不给默认值),一个是不带参的,
2、在你的程序中仅仅改动一点:构造函数的string默认值改成正确的写法student(string i="0",float r=0):id(i),result(r){}
页:
[1]