C 友元习题

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

{ s.A[i]=s.A[j]; i++; } while(i<j&&s.A[i]<=temp) i++; if(i<j) { s.A[j]=s.A[i]; j--; } }while(i<j); s.A[i]=temp; qsort(s,l,j-1); qsort(s,j+1,h);
} } void process::selectsort(Sample &s) // 选择排序 { int i,j,k,temp; for(i=0;i<s.n;i++) { k=i; for(j=i+1;j<=s.n-1;j++) if(s.A[j]<s.A[k]) k=j; temp=s.A[i]; s.A[i]=s.A[k]; s.A[k]=temp; } } void process::disp(Sample &s) { for(int i=0;i<s.n;i++) cout<<s.A[i]<<" "; cout<<endl; } void main() { int sel; Sample s; process p; p.getdata(s);
cout<<"原来序列:"; p.disp(s); cout<<"0:插入排序 1:希尔排序 2:冒泡排序 3:快速排序 4:选择排序 其它退出"<<endl; cout<<"选择排序方法:"; cin>>sel; switch(sel) { case 0: p.insertsort(s); cout<<"插入排序结果:";
03. 题 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(); }
本题程序如下: #include<iostream.h> #define Max 100 class Sample { int A[Max]; int n; friend class process; public: Sample(){n=0;}
}; class process { void qsort(Sample &s,int l,int h); // 私有成员,由 quicksort()成员调用 public: void getdata(Sample &s); void insertsort(Sample &s); void shellsort(Sample &s); void bubblesort(Sample &s); void quicksort(Sample &s); void selectsort(Sample &s); void disp(Sample &s); }; void process::getdata(Sample &s) { int i; cout<<"元素个数:"; cin>>s.n; for(i=0;i<s;i++) { cout<<"输入第"<<i+1<<"个数据:"; cin>>sቤተ መጻሕፍቲ ባይዱA[i]; } } void process::insertsort(Sample &s) // 插入排序 { int i,j,temp; for(i=1;i<s.n;i++) { temp=s.A[i]; j=i-1; while(temp<s.A[j]) { s.A[j+1]=s.A[j]; j--; } s.A[j+1]=temp; } } void process::shellsort(Sample &s) // 希尔排序 { int i,j,gap,temp; gap=s.n/2;
}; int A::set(B &b) // 由于使用了类 B 的定义,故本函数的定义应放在类 B 定义之后 { return i=b.i; } void main() { A a(1); B b(2); cout<<a.get()<<","; a.set(b); cout<<a.get()<<endl; }
本程序的执行结果如下: 输出结果: 最高分者:李明 最低分者:张伟
-------------------------------------------------------------
04.有一个学生类 student,包括学生姓名、成绩,设计一个友元函数,输出成绩对应的等级:大于等于 90:优;80~90:良;70~79:中;60!69:及格;小于 60:不及格。 解: #include<iostream.h> #include<string.h> #include<iomanip.h> class student { char name[10]; int deg; char level[7]; public: student(char na[],int d) { strcpy(name,na); deg=d; } char *getname(){ return name;} friend void trans(student &s)
} }; void main() { student st[]={student("王华",78),student("李明",92),student("张伟",62),student("孙强",88)}; int i,min=0,max=0; for(i=1;i<4;i++) { if(compare(st[max],st[i])==-1) max=i; else if(compare(st[i],st[min])==1) min=i; } cout<<"输出结果:"<<endl; cout<<" 最高分:"<<st[max].getname()<<endl; cout<<" 最低分:"<<st[min].getname()<<endl; }
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); 用于输出数据
{ if(s.deg>=90) strcpy(s.level,"优"); else if(s.deg>=80) strcpy(s.level,"良"); else if(s.deg>=70) strcpy(s.level,"中"); else if(s.deg>=60) strcpy(s.level,"及格"); else strcpy(s.level,"不及格"); } void disp() { cout<<setw(10)<<name<<setw(6)<<deg<<setw(8)<<level<<endl; } }; void main() { student st[]={student("王华",78),student("李明",92),student("张伟",62),student("孙强",88)}; cout<<"输出结果:"<<endl; cout<<setw(10)<<"姓名"<<setw(6)<<"成绩"<<setw(8)<<"等级"<<endl;
01. 分析以下程序的执行结果 #include<iostream.h> class Sample { int n; public: Sample(int i){n=i;} friend int add(Sample &s1,Sample &s2); }; int add(Sample &s1,Sample &s2) { return s1.n+s2.n; } void main() { Sample s1(10),s2(20); cout<<add(s1,s2)<<endl; }
while(gap>0) { for(i=gap;i<s;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; } else j=0; } gap=gap/2; } } void process::bubblesort(Sample &s) // 冒泡排序 { int i,j,temp; for(i=0;i<s.n;i++) for(j=s.n-1;j>=i+1;j--) if(s.A[j]<s.A[j-1]) { temp=s.A[j]; s.a[j]=s.A[j-1]; s.A[j-1]=temp; } } void process::quicksort(Sample &s) // 快速排序 { qsort(s,0,s.n-1); } void process::qsort(Sample &s,int l,int h) { int i=l,j=h,temp; if(l<h) { temp=s.A[l]; do { while(j>i&&s.A[j]>=temp) j--; if(i<j)
解: 本题说明了友元函数的使用方法。add()是一个友元函数,它返回两个引用对象的 n 值之和。 所以输出为: 30
注意:友元函数不是类的成元函数
----------------------------------------------------
02.分析以下程序的执行结果 #include<iostream.h> class B; class A { int i; public: int set(B&); int get(){return i;} A(int x){i=x;} }; class B { int i; public: B(int x){i=x;} friend A;
03.有一个学生类 student,包括学生姓名、成绩,设计一个友元函数,比较两个学生成绩的高低,并求 出最高分和最低分的学生。 解: #include<iostream.h> #include<string.h> class student { char name[10]; int deg; public: student(char na[],int d) { strcpy(name,na); deg=d; } char *getname(){ return name;} friend int compare(student &s1,student &s2) { if(s1.deg>s2.deg) return 1; else if(s1.deg==s2.deg) return 0; else return -1;
解: 本题说明友元类的使用方法。这里将类 A 设置为类 B 的友元类,因此,类 A 的所有成员函数均为类 B 的友元函数。通过调用 a.set(b)将 b 对象的 i 值赋给 a 对象的 i 值。 所以输出为:1,2
-------------------------------------------------
解: 本题应用友元函数修改对象的数据成员。square()是一个友元函数,它将引用对象的 n 值进行平方计算。 所以输出为:100 -----------------------------------------------------------
相关文档
最新文档