您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  C++习题与解析(友元-03) 【注册男护士专用博客】          

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) 

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。