#include<iostream>
#include<string.h>
using namespace std;
class student;
class teacher
{
private:
int bh;
char name[10];
public:
teacher(int h,char n[])
{
bh=h;
strcpy(name,n);
}
void display()
{
cout<<"bh:"<<bh<<endl;
cout<<"name:"<<name<<endl;
}
void modify_stu(student,float); /*student不是一个类名吗?怎么成形参的参数类型了*/
};
class student
{
private:
int id;
float score;
public:
student(int xh,float s)
{
id=xh;
score=s;
}
void display()
{
cout<<"id:"<<id<<endl;
cout<<"score:"<<score<<endl;
}
friend void teacher::modify_stu(student,float); /* */
};
void teacher::modify_stu(student c,float s)
/*这里的c是student的对象吧,用在这里的意思是要调用score吧?*/
{
c.score=s;
}
void main()
{
teacher t1(1000,"王琳");
t1.display();
student wc(1022,67);
wc.display();
t1.modify_stu(wc,89);
/*这个wc是student的对象,怎么不能用c 为什么要用wc*/
wc.display();
}
可能是我表达的问题,我的困惑在于 student wc(1022,67);这一句中把wc作为了student的对象,而 这一句t1.modify_stu(wc,89); 为什么要用wc作为c的实参,形参和是实参的关系我知道,形参是函数和调用函数之间传递数值的, 还有一个wc是c的实参,那他的值是(1022,67)?怎样传递给函数modify_stu(student c,float s)呢?
追答student wc(1022,67);这一句的意思是构造一个student对象的实例 wc。
modify_stu(student ,float) 的函数形参表中有一个student类型的对象,在调用改函数需要给他一个student类型的对象作为实参,不然系统无法调用改函数!
值的传递: 函数接受的是该变量的一个副本,即在调用函数时,形参和实参会有一个赋值的操作,你可单步看反汇编。
可能是我表达的问题,我的困惑在于 student wc(1022,67);这一句中把wc作为了student的对象,而 这一句t1.modify_stu(wc,89); 为什么要用wc作为c的实参,形参和是实参的关系我知道,形参是函数和调用函数之间传递数值的, 还有一个wc是c的实参,那他的值是(1022,67)?怎样传递给函数modify_stu(student c,float s)呢?
追答实参 就是一个实实在在的对象,是实际存在的,你要修改谁的值,就传谁啊,这里你要修改学生wc(包括学号,成绩)的成绩,就传wc啊,进入函数体以后c就是你要操作的学生wc
追问“这里你要修改学生wc(包括学号,成绩)的成绩,就传wc啊,修改学生wc的值是多少呢?
void teacher::modify_stu(student c,float s)
{
c.score=s;
}
这一块我还是不太懂……不吝赐教啊,谢谢
学生是一个类,类似于c语言中的结构体,它包含了学号、成绩等信息,它的值是由其成员变量学号成绩等决定的