C 习题和解析(友元-03)
2008-02-23 05:34:28来源:互联网 阅读 ()
#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)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇: C 习题和解析(友元-02)
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash