实验10友元
【实验目的】
通过本实验,掌握友元的概念。
【实验要求】
熟练掌握友元函数的使用方式。
【实验内容】
模拟教师类的对象修改学生类对象的具体数据。
1)类Teacher中的函数s_g(Student&s)是类Student的友元函数。
#include<iostream>
usingnamespacestd;
classStudent;
classTeacher{
private:
inti,*pts;
char*name;
public:
Teacher(char*p){name=p;}
~Teacher(){}
voids_g(Student&s);
};
classStudent{
private:
inti,n,x,*ps,*p;
public:
Student(){ps=newint[100];n=0;p=ps;}
~Student(){delete[]ps;}
voidinput();
voiddisplay();
friendvoidTeacher::s_g(Student&s);
};
voidTeacher::s_g(Student&s){
cout<<"Teacher"<<name<<"modifystudentgrade!"<<endl;
pts=s.ps;
for(i=0;i<s.n;i++){
if(*pts<60)*pts+=10;
pts++;
}
}
voidStudent::input(){
cout<<"Pleaseinputstudentgrade"<<endl;
cout<<"No."<<n+1<<"grade=";cin>>x;
while(x!=-1){
*(p+n++)=x;
cout<<"No."<<n+1<<"grade=";cin>>x;
}
}
voidStudent::display(){
cout<<"Studentgrade"<<endl;
for(i=0;i<n;i++){
cout<<"No."<<i+1;
cout.width(5);
cout<<*(ps+i)<<endl;
}
}
intmain(){
Students;
Teachert("Zhang");
s.input();s.display();
t.s_g(s);s.display();
return0;
}
2)类Teacher中是类Student的友类。
#include<iostream>
usingnamespacestd;
classStudent;
classTeacher{
private:
inti,*pts;
char*name;
public:
Teacher(char*p){name=p;}
~Teacher(){}
voids_g(Student&s);
voids_display(Student&s);
};
classStudent{
private:
inti,n,x,*ps,*p;
public:
Student():n(0){ps=newint[100];p=ps;}
~Student(){delete[]ps;}
voidinput();
voiddisplay();
friendclassTeacher;
};
voidTeacher::s_g(Student&s){
cout<<"Teacher"<<name<<"modifystudentgrade!"<<endl;
pts=s.ps;
for(i=0;i<s.n;i++){
if(*pts<60)*pts+=10;
pts++;
}
}
voidTeacher::s_display(Student&s){
cout<<"Studentgrade"<<endl;
pts=s.ps;
for(i=0;i<s.n;i++){
cout<<"No."<<i+1;
cout.width(3);
cout<<*pts<<endl;
pts++;
}
}
voidStudent::input(){
cout<<"Pleaseinputstudentgrade"<<endl;
cout<<"No."<<n+1<<"grade=";cin>>x;
while(x!=-1){
*(p+n++)=x;
cout<<"No."<<n+1<<"grade=";cin>>x;
}
}
voidStudent::display(){
cout<<"Studentgrade"<<endl;
for(i=0;i<n;i++){
cout<<"No."<<i+1;
cout.width(5);
cout<<*(ps+i)<<endl;
}
}
intmain(){
Students;
Teachert("Zhang");
s.input();s.display();
t.s_g(s);t.s_display(s);
return0;
}