320374616 发表于 2020-3-31 23:43:01

关于对象数组的问题

#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”函数,把初始化的数组地址传递过去之后就出错了,我搞不懂原因是什么,难道是因为这样子初始化之后数组变成常量了吗

我叫MD 发表于 2020-4-1 00:27:42




看懂的话,还请给个最佳答案

sunrise085 发表于 2020-4-1 00:48:10

你的构造函数有瑕疵,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]
查看完整版本: 关于对象数组的问题