蜡笔星子 发表于 2015-3-31 20:56:52

C++关于对象指针的问题

本帖最后由 蜡笔星子 于 2015-3-31 21:28 编辑

建立一个对象数组,内放5个学生的数据(学号,成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。
我的做法是:
#include <iostream.h>
class Student
{      
      public:
                Student(int i,double s):id(i),sroce(s){}
                void max(Student *p);
                int id;
                double sroce;
};
void Student :: max(Student *p)
{
            double max = p.sroce;
            for(int i=0,j=0;i<5;i++)
            {
                        if(p.sroce>max)
                        {
            max = p.sroce;
                                    j = i;
                        }
            }
            cout<<p.id<<" "<<max<<endl;
}

int main()
{
      Student s={
                Student(1,90),
                Student(2,94),
                Student(3,89),
                Student(4,97),
                Student(5,87)
      };
      void max(Student *p);
      Student *p = &s;
      max(p);
      
      return 0;
}

但是总是不能运行,是什么原因呢

仰望天上的光 发表于 2015-3-31 21:09:55

#include <iostream.h>
class Student
{      
      public:
                Student(int i,double s):id(i),sroce(s){}
                //void max(Student *p);
                int id;
                double sroce;
};
//void Student :: max(Student *p)
void max(Student *p)
{
            double max = p.sroce;
            for(int i=0,j=0;i<5;i++)
            {
                        if(p.sroce>max)
                        {
            max = p.sroce;
                                    j = i;
                        }
            }
            cout<<p.id<<" "<<max<<endl;
}

int main()
{
      Student s={
                Student(1,90),
                Student(2,94),
                Student(3,89),
                Student(4,97),
                Student(5,87)
      };
      void max(Student *p);
      Student *p = &s;
      max(p);

      
      return 0;
}

蜡笔星子 发表于 2015-3-31 21:12:47

仰望天上的光 发表于 2015-3-31 21:09


你好,我还有点疑惑,为什么把max函数单独拿出来就好了呢,原先声明在类中为什么不能呢?

仰望天上的光 发表于 2015-3-31 21:55:39

蜡笔星子 发表于 2015-3-31 21:12
你好,我还有点疑惑,为什么把max函数单独拿出来就好了呢,原先声明在类中为什么不能呢?

因为在类中定义的函数是类的成员函数,普通的成员函数(非static成员函数)必须要有一个类的对象才能调用。比如,按照你写的void Student :: max(Student *p){。。。}
应该这样调用:
p.max(p);其中p随便写就好,随便拿个类的对象就可以,因为这个函数所需要的所有信息都在参数p中和该对象无关,所以虽然这样做语法正确,但语义上是很奇葩的。

蜡笔星子 发表于 2015-3-31 22:28:41

仰望天上的光 发表于 2015-3-31 21:55
因为在类中定义的函数是类的成员函数,普通的成员函数(非static成员函数)必须要有一个类的对象才能调用 ...

谢谢哈,突然开窍的感觉,感觉对基本知识还是掌握得不牢,导致一直找不出问题所在,下来一定好好努力,积极思考!!

导电性heart 发表于 2015-4-2 16:13:40

学习学习
页: [1]
查看完整版本: C++关于对象指针的问题