c++指向对象数组的指针做函数参数

Singinwind 2013-09-24 02:29:17
建立class stduent 一个成员函数input函数,能够录入N个学生的信息:
#include <iostream>
using namespace std;
class student
{
public:
void input(student&);
protected:
long num;
char *name;
float grade;
};
void student::input(student&st)
{
int num;
cout<<"输入你要录入的学生个数"<<endl;
cin>>num;
st=new student[num];//这里就报错了。st想它他是一个指针
for(int i=0;i<num;i++)
{
cout<<"输入第”<<i+1<<“个学生的学号,姓名,成绩:"<<endl;
cin>>(st+i)->num;
cin>>(st+i)->name;
cin>>(st+i)->grade;
}
}
这个就报错了。我想在input(student&st)中录入num个学生的一组信息...本意是想让st是一个指向对象数组的指针,然后得到一个对象数组.....
怎么破?错在哪里》或者是有什么更好的方法
...全文
696 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine惟爱V 2013-09-26
  • 打赏
  • 举报
回复
ranky2009 2013-09-26
  • 打赏
  • 举报
回复
之所以报错,因为pt是个指针引用,你要修改pt的指向是可以的,但是你偏偏要修改(pt + i),( pt + i )指向的是个内存地址,这个地址是无法修改的,例如 void mymemory(int* & pint) { pint = new int(5);//可以 } 但是 void mymemory(int* & pint) { (pint + i) = new int(5);//错误!!!! } 要想实现互换,要么数组中的元素为指针变量。要么给数据结构互换。 void sort(student *&pt,int length)//length是学生信息的个数 { int i,j; student temp; for(i=0;i<length;i++) { for(j=i;j<length;j++) { if((p+i)->num>(p+j)->num)//通过对学生的学号进行整个信息的排序 { temp=*(p+i); *(p+i)=*(p+j);/////这里有报错了 *(p+j)=temp; } } } 还有需要注意的是,student类中有指针成员,要注意类的默认赋值构造函数是浅复制,当然在此例中浅复制更好。
Singinwind 2013-09-26
  • 打赏
  • 举报
回复
不好意思,有点忙忘记回各位朋友的帖子了; 先在我想通过“按照学生的学号”对录入的学生信息进行“从小到大的”排序: 仍然用指针 比如录入的是 05 aa 98.5 02 bb 54.5 04 cc 78.3 排序完成后变成: 02 bb 54.5 04 cc 78.3 05 aa 98.5 我用指针的算法如下: void sort(student *&pt,int length)//length是学生信息的个数 { int i,j; student *temp; for(i=0;i<length;i++) { for(j=i;j<length;j++) { if((p+i)->num>(p+j)->num)//通过对学生的学号进行整个信息的排序 { temp=(p+i); (p+i)=(p+j);/////这里有报错了 (p+j)=temp; } } } 我要问的是怎么通过对象指针对对象数组进行排序
lm_whales 2013-09-25
  • 打赏
  • 举报
回复
class student{ friend ostream& operator<<(ostream &,const student& ); friend istream& operator>>(istream &,const studeng& ); } vector<student> vs;//这和数组差不多。 student stu; stu.num=-1; do{ cin>>stu; if(stu.num>=0){ vs.push_back(stu); } }while(stu.num>=0);
CRAZY_STUDY_C 2013-09-25
  • 打赏
  • 举报
回复
附上代码 #include <iostream> #include <vector> using namespace std; struct ST_STUDENT { long num; char name[16]; float grade; }; class student { public: void input(vector<ST_STUDENT> &vstStudent); }; void student::input(vector<ST_STUDENT> &vstStudent) { int num; cout<<"输入你要录入的学生个数"<<endl; cin>>num; ST_STUDENT st; for(int i=0;i<num;i++) { cout<<"输入第"<<i+1<<"个学生的学号,姓名,成绩:"<<endl; cin>>st.num>>st.name>>st.grade; vstStudent.push_back(st); } }
CRAZY_STUDY_C 2013-09-25
  • 打赏
  • 举报
回复
把类student里的 input(student &) 改为input(student *); 下面也改成void student::input(student *st) 不过建议你用结构体来辨识学生属性 也不要用动态分配数组 可以用input(vector<ST_STUDENT> &) 下面也改成void student::input(vector<结构体名称> &) 然后实现的时候 只要在函数里定义 ST_STUDENT的对象 每次录入学生信息后 就push_back进vector 就行了 比用动态数组 要安全很多好很多
Singinwind 2013-09-24
  • 打赏
  • 举报
回复
现在我通过学生的学号对每个学生的学号进行排序 如cin>>12 zhangsan 89 cin>>08 lisi 84 cin>>05 wangwu 45 调用sort() 会变成 05 wangwu 45
Singinwind 2013-09-24
  • 打赏
  • 举报
回复
for 五楼: 怎么觉得指针有点虚的感觉 如果student *st=NULL; 是否有初始化那些数据成员呢? 假如我在加个构造函数 student::student() { num=0;name="";grade=0; } 建立一个指针这样是否能初始化数据成员呢
Singinwind 2013-09-24
  • 打赏
  • 举报
回复
对六楼:我还是觉得 int input(stdudent * pStu) { ......... return iStuCount } 让input函数返回一个记录多少线性表有多少个元组的值吧
漫步者、 2013-09-24
  • 打赏
  • 举报
回复
然后再student st[N].. 这么通过我上面弄的input()去得到这样st[N]的对象数组呢 intput(stdudent * pStu,int iStuCount);
Mr苏 2013-09-24
  • 打赏
  • 举报
回复
#include <iostream> using namespace std; class student { public: void input(student *st); //protected: long num; char name[100]; float grade; }; void student::input(student *st) { int num=1; cout<<"输入你要录入的学生个数"<<endl; cin>>num; st=new student[num];//这里就报错了。st想它他是一个指针 for(int i=0;i<num;i++) { cout<<"输入第”<<i+1<<“个学生的学号,姓名,成绩:"<<endl; cin>>(st+i)->num; cin>>(st+i)->name; cin>>(st+i)->grade; } } void main() { student *st=NULL; st->input(st); }
Singinwind 2013-09-24
  • 打赏
  • 举报
回复
还有就是有个问题是我现在要插入N个学生数据建立线性表, 那么应该有student st[N]这样N个对象数组, 总不能cin>>N; 然后再student st[N].. 这么通过我上面弄的input()去得到这样st[N]的对象数组呢
Singinwind 2013-09-24
  • 打赏
  • 举报
回复
居然通过了
booirror 2013-09-24
  • 打赏
  • 举报
回复
new 分配内存返回的应该是指针类型,而你赋值给引用类型,显然会报错
漫步者、 2013-09-24
  • 打赏
  • 举报
回复
void student::input(student&st) 改为void student::input(student*&st)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧