C++习题与解析(友元-03) |
|
www.nanhushi.com 佚名 不详 |
题1.分析以下程序的执行结果 #include<iostream.h> class Sample { int n; public: Sample(){} Sample (int m){n=m;} friend void square(Sample &s) { s.n=s.n*s.n; } void disp() { cout<<"n="<<n<<endl; } }; void main() { Sample a(10); square(a); a.disp(); }
解: 本题应用友元函数修改对象的数据成员。square()是一个友元函数,它将引用对象的n值进行平方计算。 所以输出为:100
题2.分析以下程序的执行结果 #include<iostream.h> class B; class A { int i; friend B; void disp(){cout<<i<<endl;} }; class B { public: void set(int n) { A a; a.i=n; // i是对象a的私有数据成员,在友元类可以使用 a.disp(); // disp()是对象a的私有成员函数,在友元类可以使用 } }; void main() { B b; b.set(2); } 解: 本题说明友元类的设计方法。这里将类B设置为类A的友元类,因此,在设计类B时可以直接使用类A的私有数据成员和成员函数。 所以输出为: 2
题3.分析以下程序的执行结果 #include<iostream.h> class teacher; class student { char *name; public: student(char *s){name=s;} friend void print(student &,teacher &); }; class teacher { char *name; public: teacher(char *s){name=s;} friend void print(student &,teacher &); }; void print(student &a,teacher &b) { cout<<"the student is:"<<a.name<<endl; cout<<"the teacher is:"<<b.name<<endl; } void main() { student s("Li Hu"); teacher t("Wang Ping"); print(s,t); }
解: student和teacher类共用一个友元函数的实现。 所以输出为: the student is Li Hu the teacher is Wan Ping
题4.有一个学生类student,包括学生姓名、成绩,设计一个友元类,输出成绩大于等于80分以上者。 解: 学生类student的disp()函数设计成友元函数。 本题程序如下: #include<iostream.h> #include<string.h> #include<iomanip.h> class student { char name[10]; int deg; public: student(char na[],int d) { strcpy(name,na); deg=d; } char *getname(){ return name;} friend void disp(student &s) { if(s.deg>=80) cout<<setw(10)<<s.name<<setw(6)<<s.deg<<endl; } }; void main() { student st[]={student("王华",78),student("李明",92),student("张伟",62),student("孙强",88)}; cout<<"输出结果:"<<endl; cout<<setw(10)<<"姓名"<<setw(6)<<"成绩"<<endl; for(int i=0;i<4;i++) disp(st[i]); }
本程序的执行结果如下: 输出结果: 姓名 成绩 李明 92 孙强 88
题5.有一个向量类Vector,包括一个点的坐标位置x和y,设计两个友元函数,实现两个向量的加法和减法的运算 解: 本题程序如下: #include<iostream.h> class Vector { int x,y; public: Vector(){} Vector(int i,int j){x=i;y=j;} void disp() { cout<<"("<<x<<","<<y<<")"; } friend Vector add(Vector &v1,Vector &v2) { Vector v; v.x=v1.x+v2.x; v.y=v1.y+v2.y; return v; } friend Vector sub(Vector &v1,Vector &v2) { Vector v; v.x=v1.x-v2.x; v.y=v1.y-v2.y; return v; } }; void main() { Vector v1(10,20),v2(4,5),v3; v3=add(v1,v2); cout<<"输出结果:"<<endl; cout<<" "; v1.disp();cout<<"+";v2.disp(); cout<<"="; v3.disp(); cout<<endl; v3=sub(v1,v2); cout<<" "; v1.disp(); cout<<"-";v2.disp(); cout<<"=";v3.disp(); cout<<endl; }
本程序的执行结果如下: 输出结果: (10,20)+(4,5)=(14,25) (10,20)-(4,5)=(6,15)
|
|
|
文章录入:杜斌 责任编辑:杜斌 |
|
上一篇文章: C++习题与解析(友元-02) 下一篇文章: C++习题与解析(友元-04) |
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
|