注册 登录
编程论坛 C++教室

建立一个对象数组,内放5学生数据(学号,成绩,由用户输入)设立函数max用指向对象的指针做函数参数,在max中找出成绩最高的,并输出学号

唐兵 发布于 2013-03-26 12:44, 11246 次点击
#include <iostream>
using namespace std;
class A
{
public:
    A(int g, int n):grade(g),number(n){}
    void get()
    {
        cin>>grade>>number;
    }
    int grade;//这里如果改为private,程序该怎样改呢
    int number;//
   
};
void max(A *s)
{
    int x;
    int i;//为什么main里定义了这里还要定义呢?
    int q;//
    x=s[0].grade;
    for(i=0;i<5;i++)
    {
        if(x<s[i+1].grade)
        {
            x=s[+1].grade;
        q=i;
        }
    }


}
int main()
{
   
   
    int i;
    int q=0;
    A stud[5]={
    A(1,1),A(2,4),A(4,5),A(9,7),A(2,3)};//这里必须对stud初始化吗?我不想对它赋值。有没有简便点的方法
    for(i=0;i<5;i++)
    {
        cout<<"please  stud's grade and number"<<endl;
    stud[i].get();
    }
    void max(A *);
    A *pt=stud;
    max(pt);
    cout<<stud[q].number;
        return 0;
}
8 回复
#2
peach54602013-03-26 13:59
int i;//为什么main里定义了这里还要定义呢?

去看变量作用域
#3
peach54602013-03-26 14:00
A(1,1),A(2,4),A(4,5),A(9,7),A(2,3)};//这里必须对stud初始化吗?我不想对它赋值。有没有简便点的方法

不赋值,怎么排序?
况且,不是你自己写的构造函数吗?
A(int g, int n):grade(g),number(n){}
#4
唐兵2013-03-27 12:31
回复 3楼 peach5460
我想问有没有简单的初始方法
#5
唐兵2013-03-27 12:32
回复 2楼 peach5460
主函数里定义的不是全局变量吗
#6
shmilyflf2013-03-27 14:54
#include <iostream>
using namespace std;
//int i;//这样就是全局的了,不过在这里定义了你在函数里面就不要定义了,否则会覆盖这个
class A
{
public:
    A()
    {}
    A(int g, int n):grade(g),number(n){}
    void get()
    {
        cin>>grade>>number;
    }
    int GetGrade()//增加两个函数分别得到grade和number
    { return grade; }//这里我为了方便就直接在这里写了,和C#属性的用法类似
    int GetNumber()
    { return number; }

private:
    int grade;//这里如果改为private,程序该怎样改呢
    int number;//
};
void max(A *s,int &q)//参数加一个,你要返回q得值,把q设为&(引用)或者指针都行,要是值类型是不可以的。
{
    int x;
    int i;//为什么main里定义了这里还要定义呢?
    //变量的作用域你真是该好好看看,主函数里面定义的是主函数的,在别的函数里面是不能使用的
    //你可以在主函数,就是在所有函数外面定义就是全局的了。
    //int q;//
    x=s[0].GetGrade();
    q=0;//如果第0个成绩是最大的
    for(i=1;i<5;i++)
    {
        if(x<s[i].GetGrade())
        {
            x=s[i].GetGrade();//这里我情愿相信你是复制代码的时候复制错了
            q=i;//你这个q如何传出去????
        }
    }
}
int main()
{
    int i;//你还是好好看看变量的作用域吧
    int q;
    //A stud[5]={A(1,1),A(2,4),A(4,5),A(9,7),A(2,3)};//这里必须对stud初始化吗?我不想对它赋值。有没有简便点的方法
    A stud[5];//你想省事就要给类A加一个无参的构造函数!!!当你自己写了一个有参构造函数后,C++是不会为你提供无参构造函数的!!!
    for(i=0;i<5;i++)
    {
        cout<<"please stud's grade and number"<<endl;
        stud[i].get();
    }
    void max(A *,int &);
    A *pt=stud;
    max(pt,q);
    cout<<stud[q].GetNumber()<<endl;
    return 0;
}
#7
peach54602013-03-27 15:40
以下是引用唐兵在2013-3-27 12:32:36的发言:

主函数里定义的不是全局变量吗

去看看书,什么叫全局变量...
#8
peach54602013-03-27 15:41
以下是引用唐兵在2013-3-27 12:31:46的发言:

我想问有没有简单的初始方法

没有
#9
唐兵2013-03-29 15:30
回复 6楼 shmilyflf
感激不尽,谢谢谢谢。。。。
1