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;
}
但是总是不能运行,是什么原因呢
#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:09
你好,我还有点疑惑,为什么把max函数单独拿出来就好了呢,原先声明在类中为什么不能呢? 蜡笔星子 发表于 2015-3-31 21:12
你好,我还有点疑惑,为什么把max函数单独拿出来就好了呢,原先声明在类中为什么不能呢?
因为在类中定义的函数是类的成员函数,普通的成员函数(非static成员函数)必须要有一个类的对象才能调用。比如,按照你写的void Student :: max(Student *p){。。。}
应该这样调用:
p.max(p);其中p随便写就好,随便拿个类的对象就可以,因为这个函数所需要的所有信息都在参数p中和该对象无关,所以虽然这样做语法正确,但语义上是很奇葩的。 仰望天上的光 发表于 2015-3-31 21:55
因为在类中定义的函数是类的成员函数,普通的成员函数(非static成员函数)必须要有一个类的对象才能调用 ...
谢谢哈,突然开窍的感觉,感觉对基本知识还是掌握得不牢,导致一直找不出问题所在,下来一定好好努力,积极思考!! 学习学习
页:
[1]