C++友元习题.docx

上传人:b****5 文档编号:3325054 上传时间:2022-11-21 格式:DOCX 页数:10 大小:17.36KB
下载 相关 举报
C++友元习题.docx_第1页
第1页 / 共10页
C++友元习题.docx_第2页
第2页 / 共10页
C++友元习题.docx_第3页
第3页 / 共10页
C++友元习题.docx_第4页
第4页 / 共10页
C++友元习题.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

C++友元习题.docx

《C++友元习题.docx》由会员分享,可在线阅读,更多相关《C++友元习题.docx(10页珍藏版)》请在冰豆网上搜索。

C++友元习题.docx

C++友元习题

01.分析以下程序的执行结果

#include

classSample

{

intn;

public:

Sample(inti){n=i;}

friendintadd(Sample&s1,Sample&s2);

};

intadd(Sample&s1,Sample&s2)

{

returns1.n+s2.n;

}

voidmain()

{

Samples1(10),s2(20);

cout<

}

解:

本题说明了友元函数的使用方法。

add()是一个友元函数,它返回两个引用对象的n值之和。

所以输出为:

30

注意:

友元函数不是类的成元函数

----------------------------------------------------

02.分析以下程序的执行结果

#include

classB;

classA

{

inti;

public:

intset(B&);

intget(){returni;}

A(intx){i=x;}

};

classB

{

inti;

public:

B(intx){i=x;}

friendA;

};

intA:

:

set(B&b)//由于使用了类B的定义,故本函数的定义应放在类B定义之后

{

returni=b.i;

}

voidmain()

{

Aa

(1);

Bb

(2);

cout<

a.set(b);

cout<

}

解:

本题说明友元类的使用方法。

这里将类A设置为类B的友元类,因此,类A的所有成员函数均为类B的友元函数。

通过调用a.set(b)将b对象的i值赋给a对象的i值。

所以输出为:

1,2

-------------------------------------------------

03.有一个学生类student,包括学生XX、成绩,设计一个友元函数,比较两个学生成绩的高低,并求出最高分和最低分的学生。

解:

#include

#include

classstudent

{

charname[10];

intdeg;

public:

student(charna[],intd)

{

strcpy(name,na);

deg=d;

}

char*getname(){returnname;}

friendintpare(student&s1,student&s2)

{

if(s1.deg>s2.deg)

return1;

elseif(s1.deg==s2.deg)

return0;

elsereturn-1;

}

};

voidmain()

{

studentst[]={student("王华",78),student("李明",92),student("X伟",62),student("孙强",88)};

inti,min=0,max=0;

for(i=1;i<4;i++)

{

if(pare(st[max],st[i])==-1)

max=i;

elseif(pare(st[i],st[min])==1)

min=i;

}

cout<<"输出结果:

"<

cout<<"最高分:

"<

cout<<"最低分:

"<

}

本程序的执行结果如下:

输出结果:

最高分者:

李明

最低分者:

X伟

-------------------------------------------------------------

04.有一个学生类student,包括学生XX、成绩,设计一个友元函数,输出成绩对应的等级:

大于等于90:

优;80~90:

良;70~79:

中;60!

69:

及格;小于60:

不及格。

解:

#include

#include

#include

classstudent

{

charname[10];

intdeg;

charlevel[7];

public:

student(charna[],intd)

{

strcpy(name,na);

deg=d;

}

char*getname(){returnname;}

friendvoidtrans(student&s)

{

if(s.deg>=90)

strcpy(s.level,"优");

elseif(s.deg>=80)

strcpy(s.level,"良");

elseif(s.deg>=70)

strcpy(s.level,"中");

elseif(s.deg>=60)

strcpy(s.level,"及格");

else

strcpy(s.level,"不及格");

}

voiddisp()

{

cout<

}

};

voidmain()

{

studentst[]={student("王华",78),student("李明",92),student("X伟",62),student("孙强",88)};

cout<<"输出结果:

"<

cout<

02.05.设计一个类Sample,它有两个私有成员A[]和n(A中元素个数),将对A[]中数据进行各种排序的函数放入到一个友元类process中。

解:

process类不包含任何数据成员,包含的公共成员函数如下:

getdata(Sample&s);用于获取对象s的数据

insertsort(Sample&s);用于进行插入排序

shellsort(Sample&s);用于进行希尔排序

bubblesort(Sample&s);用于进行冒泡排序

quicksort(Sample&s);用于进行快速排序

selectsort(Sample&s);用于进行选择排序

disp(Sample&s);用于输出数据

本题程序如下:

#include

#defineMax100

classSample

{

intA[Max];

intn;

friendclassprocess;

public:

Sample(){n=0;}

};

classprocess

{

voidqsort(Sample&s,intl,inth);

//私有成员,由quicksort()成员调用

public:

voidgetdata(Sample&s);

voidinsertsort(Sample&s);

voidshellsort(Sample&s);

voidbubblesort(Sample&s);

voidquicksort(Sample&s);

voidselectsort(Sample&s);

voiddisp(Sample&s);

};

voidprocess:

:

getdata(Sample&s)

{

inti;

cout<<"元素个数:

";

cin>>s.n;

for(i=0;i

{

cout<<"输入第"<

";

cin>>s.A[i];

}

}

voidprocess:

:

insertsort(Sample&s)//插入排序

{

inti,j,temp;

for(i=1;i

{

temp=s.A[i];

j=i-1;

while(temp

{

s.A[j+1]=s.A[j];

j--;

}

s.A[j+1]=temp;

}

}

voidprocess:

:

shellsort(Sample&s)//希尔排序

{

inti,j,gap,temp;

gap=s.n/2;

while(gap>0)

{

for(i=gap;i

{

j=i-gap;

while(j>=gap)

if(s.A[j]>s.A[j+gap])

{

temp=s.A[j];

s.A[j]=s.A[j+gap];

s.A[j+gap]=temp;

j=j-gap;

}

elsej=0;

}

gap=gap/2;

}

}

voidprocess:

:

bubblesort(Sample&s)//冒泡排序

{

inti,j,temp;

for(i=0;i

for(j=s.n-1;j>=i+1;j--)

if(s.A[j]

{

temp=s.A[j];

s.a[j]=s.A[j-1];

s.A[j-1]=temp;

}

}

voidprocess:

:

quicksort(Sample&s)//快速排序

{

qsort(s,0,s.n-1);

}

voidprocess:

:

qsort(Sample&s,intl,inth)

{

inti=l,j=h,temp;

if(l

{temp=s.A[l];

do

{

while(j>i&&s.A[j]>=temp)

j--;

if(i

{

s.A[i]=s.A[j];

i++;

}

while(i

i++;

if(i

{

s.A[j]=s.A[i];

j--;

}

}while(i

s.A[i]=temp;

qsort(s,l,j-1);

qsort(s,j+1,h);

}

}

voidprocess:

:

selectsort(Sample&s)//选择排序

{

inti,j,k,temp;

for(i=0;i

{

k=i;

for(j=i+1;j<=s.n-1;j++)

if(s.A[j]

k=j;

temp=s.A[i];

s.A[i]=s.A[k];

s.A[k]=temp;

}

}

voidprocess:

:

disp(Sample&s)

{

for(inti=0;i

cout<

cout<

}

voidmain()

{

intsel;

Samples;

processp;

p.getdata(s);

cout<<"原来序列:

";

p.disp(s);

cout<<"0:

插入排序1:

希尔排序2:

冒泡排序3:

快速排序4:

选择排序其它退出"<

cout<<"选择排序方法:

";

cin>>sel;

switch(sel)

{

case0:

p.insertsort(s);

cout<<"插入排序结果:

";

03.题1.分析以下程序的执行结果

#include

classSample

{

intn;

public:

Sample(){}

Sample(intm){n=m;}

friendvoidsquare(Sample&s)

{

s.n=s.n*s.n;

}

voiddisp()

{

cout<<"n="<

}

};

voidmain()

{

Samplea(10);

square(a);

a.disp();

}

解:

本题应用友元函数修改对象的数据成员。

square()是一个友元函数,它将引用对象的n值进行平方计算。

所以输出为:

100

-----------------------------------------------------------

题2.分析以下程序的执行结果

#include

classB;

classA

{

inti;

friendB;

voiddisp(){cout<

};

classB

{

public:

voidset(intn)

{

Aa;

a.i=n;//i是对象a的私有数据成员,在友元类可以使用

a.disp();//disp()是对象a的私有成员函数,在友元类可以使用

}

};

voidmain()

{

Bb;

b.set

(2);

}

解:

本题说明友元类的设计方法。

这里将类B设置为类A的友元类,因此,在设计类B时可以直接使用类A的私有数据成员和成员函数。

所以输出为:

2

-------------------------------------------------------------

题3.分析以下程序的执行结果

#include

classteacher;

classstudent

{

char*name;

public:

student(char*s){name=s;}

friendvoidprint(student&,teacher&);

};

classteacher

{

char*name;

public:

teacher(char*s){name=s;}

friendvoidprint(student&,teacher&);

};

voidprint(student&a,teacher&b)

{

cout<<"thestudentis:

"<

cout<<"theteacheris:

"<

}

voidmain()

{

students("LiHu");

teachert("WangPing");

print(s,t);

}

解:

student和teacher类共用一个友元函数的实现。

所以输出为:

thestudentisLiHu

theteacherisWanPing

--------------------------------------------------------------

题4.有一个学生类student,包括学生XX、成绩,设计一个友元类,输出成绩大于等于80分以上者。

解:

学生类student的disp()函数设计成友元函数。

本题程序如下:

#include

#include

#include

classstudent

{

charname[10];

intdeg;

public:

student(charna[],intd)

{

strcpy(name,na);

deg=d;

}

char*getname(){returnname;}

friendvoiddisp(student&s)

{

if(s.deg>=80)

cout<

}

};

voidmain()

{

studentst[]={student("王华",78),student("李明",92),student("X伟",62),student("孙强",88)};

cout<<"输出结果:

"<

cout<

for(inti=0;i<4;i++)

disp(st[i]);

}

本程序的执行结果如下:

输出结果:

成绩

李明92

孙强88

--------------------------------------------------------------

题5.有一个向量类Vector,包括一个点的坐标位置x和y,设计两个友元函数,实现两个向量的加法和减法的运算

解:

本题程序如下:

#include

classVector

{

intx,y;

public:

Vector(){}

Vector(inti,intj){x=i;y=j;}

voiddisp()

{

cout<<"("<

}

friendVectoradd(Vector&v1,Vector&v2)

{

Vectorv;

v.x=v1.x+v2.x;

v.y=v1.y+v2.y;

returnv;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1