鱼C论坛

 找回密码
 立即注册
查看: 1013|回复: 2

[已解决]关于对象数组的问题

[复制链接]
发表于 2020-3-31 23:43:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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[i].result<a[j].result)
                        {
                                temp=a[i];
                                a[i]=a[j];
                                a[j]=temp;
                        }
                }
        }
       
}
int main()
{
        int i=0;
        student a[10]={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[i].printf();
        }
        return 0;
}
// 当我调用“paixu”函数,把初始化的数组地址传递过去之后就出错了,我搞不懂原因是什么,难道是因为这样子初始化之后数组变成常量了吗
最佳答案
2020-4-1 00:27:42
10.png 12.png 11.png 13.png 14.png


看懂的话,还请给个最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-1 00:27:42 | 显示全部楼层    本楼为最佳答案   
10.png 12.png 11.png 13.png 14.png


看懂的话,还请给个最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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){}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 16:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表