习题二C++练习(含有答案).doc_第1页
习题二C++练习(含有答案).doc_第2页
习题二C++练习(含有答案).doc_第3页
习题二C++练习(含有答案).doc_第4页
习题二C++练习(含有答案).doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档习 题 二 一、填空题 1. 对运算符进行重载时,不能 改变结合性 ,不能 改变操作数个数 ,不能 改变优先级 。 2. 当+被重载为后置成员函数时需要 0 个参数。 3. 当+被重载为前置成员函数时需要 1 个参数。 4. 在C+中,运算符重载函数可以是 成员函数 ,也可以是 友元函数 ,还可以是 普通函数 。5. 友元破坏了类的 封装性 特性。 6. 类的友元能够访问这个类的 所有 成员。 7. 类的静态数据成员的初始化是在 类外 进行的。 8. 类的静态成员函数 没有 this指针。 9. 类的静态成员函数访问该类的非静态成员可以通过 参数传递对象 来实现。 10. 不能被重载的类成员函数是 构造和析构函数 。 二、选择题 1. 已知类A有一个带double型参数的构造函数,且将运算符“+”重载为该类友元函数,若如下语句:A x(2.5),y(3.6),z(0); z=x+y; 能够正常运行,运算符重载函数operator+ 应在类中声明为( D )。A. friend A operator+ (double , double) ; B. friend A operator+ ( double , A &);C. friend A operator+ ( A &, double); D. friend A operator+ ( A & , A &);2. 下列关于运算符重载的描述中,正确的是( D )。 A. 运算符重载可以改变操作数的个数 B. 运算符重载可以改变优先级 C. 运算符重载可以改变结合性 D. 运算符重载不可以改变语法结构 3. 友元运算符表达式obj1obj2被C+编译器解释为( A )。A. operator(obj1,obj2) B. (obj1,obj2) C. obj2.operator(obj1) D. obj1.operator(obj2) 4. 下列关于C+运算符函数的返回类型的描述中,错误的是( C )。A. 可以是类类型 B. 可以是int类型 C. 可以是void类型 D. 可以是float类型 5. 为了区别单目运算符的前置和后置运算,在后置运算符进行重载时,额外添加一个参数,其类型是( D )。A. void B. char C. float D. int6. 以下运算符中,不能在C+中重载的是( A )。A. ?: B. + C. - D. =7. 在一个类中可以对一个操作符进行( D )重载。 A. 1种 B. 2种以下 C. 3种以下 D. 多种 8. 若类A被说明成类B的友元,则( D )。A. 类A的成员即类B的成员 B. 类B的成员即类A的成员 C. 类A的成员函数不能访问类B的成员 D. 类B不一定是类A的友元 9. 友元的作用是( A )。A. 提高成员的运行效率 B. 加强类的封装性C. 实现数据的隐藏性 D. 增加成员函数的种类 10. 下列关于静态数据成员的特性描述中错误的是( D )。A. 说明静态数据成员时前边要加static B. 静态数据成员要在类体外进行初始化 C. 引用静态数据成员时,要在静态数据成员名前加“类名”和作用域运算符 D. 静态数据成员不是所有对象所共用的 11. 关于友元的描述中,正确的是( C )。A. 友元函数是成员函数的一种,它可以访问类的私有成员 B. 友元函数不能提高程序的运行效率 C. 友元函数要在类体内说明 D. 友元函数增强了类的封装性和隐藏性 12. 用来说明类的友元的是( D )。A. private B. protected C. public D. friend 13. 已知f1和f2是同一个类的两个成员函数,但f1不能调用f2,下列选项中符合要求的是( B )。A. f1和f2都是静态函数 B. f1是静态函数,f2不是静态函数 C. f1不是静态函数,f2是静态函数 D. f1和f2都不是静态函数 14. 下面对于友元函数描述正确的是( C )。A. 友元函数的实现必须在类的内部定义 B. 友元函数是类的成员函数 C. 友元函数破坏了类的封装性和隐藏性 D. 友元函数不能访问类的保护成员 15. 一个类的友元函数或友元类能够通过成员操作符访问该类的( D ) A. 私有成员 B. 保护成员 C. 公有成员 D. 所有成员16. 下面对静态数据成员的描述中,正确的是( D ) A. 静态数据成员可以在类体内进行初始化 B. 静态数据成员不可以被类的对象调用 C. 静态数据成员不受private控制符的限制 D. 静态数据成员可以直接用类名调用 17. C+语言中提供的( B )不是类的成员,但具有类成员的特权。 A. 构造函数 B. 友元函数 C. 虚函数 D. 重载函数18. 下列关于静态成员函数的说法中不正确的是( C ) A. 静态成员函数不属于对象成员 B. 对静态成员函数的引用不需要使用对象名 C. 静态成员函数中可以直接引用类的非静态成员 D. 静态成员函数中可以直接引用类的静态成员 19. 下面对友元的错误描述是( D )。A. 关键字friend用于声明友元 B. 一个类中的成员函数可以是另一个类的友元函数C. 友元函数访问对象的成员不受访问特性影响D. 友元函数通过this指针访问对象成员20.下列有关一个类的友元函数的叙述中,正确的( B ) A. 允许在类外访问类中除私有成员以外的所有成员 B. 允许在类外访问类中的任何成员C. 友元也是该类的成员D. 友元的声明必须被放在该类的公有部分三、判断题1、静态数据成员可以通过类名或对象名引用。2、静态数据成员可以在类内或类外进行初始化。3、在静态成员函数中可以访问本类中非静态的数据成员。4、类的静态成员函数的初始化工作要放在类外进行。5、若A是B的友元类,B是C的友元类,则A是C的友元类。6、通过运算符重载,可以定义新的运算符。7、C+中的所有运算符都能被重载。8、运算符重载不能改变操作数的个数。9、运算符重载不能改变其优先级与结合性。10、在运算符重载函数中不能使用缺省的参数值。答案:1、2、3、4、5、6、7、8、9、10、四、程序分析题(写程序运行结果) 1. #include class A int x,y,z; public: A(int vx,int vy,int vz) x=vx;y=vy;z=vz; A() x=0;y=0;z=0; A operator+(A t) A te; te.x=x+t.z; te.y=y+t.y; te.z=z+t.z; return te; A operator-(A t) A te; te.x=x-t.z; te.y=y-t.y; te.z=z-t.z; return te; A operator=(A t) x=t.x; y=t.y; z=t.z; return *this; void print() coutx y endl; ; void main() A t1(10,10,10),t2(20,20,20),t3; t3=t1+t2; t3.print(); t3=t2=t1; t1.print(); t2.print(); t3.print(); 答案:30 3010 1010 1010 102. #include class A public: A(int r,int c) row=r;col=c; elem=new introw*col; int& operator()(int x,int y) return elemcol*x+y; int operator()(int x,int y)const return elemcol*x+y; A() delete elem; private: int *elem; int row,col; ; void main() A m(5,8); int i; for( i=0;i5;i+) m(i,1)=i+5; for( i=0;i5;i+) coutm(i,1),; coutendl; 答案:5,6,7,8,9,3. #include using namespace std; class goods private: static int totalweight; int weight; public: goods(int w) weight=w; totalweight+=weight; goods(goods &gd) weight=gd.weight; totalweight+=weight; goods() totalweight-=weight; static int gettotal() return totalweight; ; int goods:totalweight=0; void main() goods g1(50); coutgoods:gettotal()endl; goods g2(100); coutg2.gettotal()endl; 答案:501504. #include using namespace std; class A int i,j; static int c; public: A(int a=0,int b=0) i=a; j=b; c+; A() c-; static void f() coutc=cendl; ; int A:c=0; void main() A a(4,8),b,d; A z(3,6), f; A:f(); A:f(); 答案:c=5c=35. #include using namespace std; class point public: void poi(int px=10,int py=10) x=px; y=py; friend int getpx(point a); friend int getpy(point b); private: int x,y; ; int getpx(point a) return a.x; int getpy(point a) return a.y; void main() point p,q; p.poi();q.poi(15,15); coutgetpx(p); coutgetpy(p)endl; coutgetpx(q); coutgetpy(q)endl; 答案:101015156. #include class B; class A int data; A *prev; public: A(int d,A *n)data=d;prev=n; friend class B; ; class B A *top; public: B()top=0; void push(int i)A *n=new A(i,top);top=n; int pop() A *t=top; if(top) top=top-prev; int c=t-data; delete t; return c; return 0; ; void main() int c10=23,34,56,87,67,876,42,657,55,66; B s; for(int i=0; i10;i+)s.push(ci); for(i=0; i10; i+)couts.pop(),; coutendl; 答案:66,55,657,42,876,67,87,56,34,23,7. #includeusing namespace std;class TIME;class DATEpublic:DATE(int a=2004,int m=9,int b=23)year=a;month=m;day=b;void DateTime(TIME &t);private:int year,month,day;class TIMEpublic:TIME(int h=0,int m=0,int s=0)hour=h;minute=m;second=s;friend void DATE:DateTime(TIME&t);private:int hour,minute,second;void DATE:DateTime(TIME&t)coutNow isyear.month.dayt.hour:t.minute:t.second.endl;int main()DATE b(2004,9,23);TIME t(10,20,50);b.DateTime(t);return 0;答案:Now is2004.9.2310:20:50.四、编程题 1. 定义一个处理日期的类TDate,它有3个私有数据成员:Month,Day,Year和若干个公有成员函数,并实现如下要求:(1)成员函数设置缺省参数;(2)定义一个友元函数来打印日期。参考程序:#include using namespace std;class TDatepublic:TDate(int m=0,int d=0,int y=0):Month(m),Day(d),Year(y)TDate()friend void Show(TDate);private:int Month,Day,Year;void Show(TDate d)coutd.Year年d.Month月d.Day日endl;int main()TDate d1,d2(4,8,2014);Show(d1);Show(d2);return 0;2. 设计一个类CTimeInfo,要求其满足下述要求。 (1)要求有一个无参数的构造函数,其初始的小时和分钟分别为:0,0; (2)要求有一个带参数的构造函数,其参数分别对应小时和分钟; (3)要求用一个成员函数实现时间的设置; (4)要求用一个友元函数实现以12小时的方式输出时间; (5)要求用一个友元函数实现以24小时的方式输出时间; 参考程序:#include using namespace std;class CTimeInfopublic: CTimeInfo():Hour(0),Minute(0)CTimeInfo(int h,int m):Hour(h),Minute(m)CTimeInfo()void Set(int h,int m)Hour=h; Minute=m;friend void Show_12(CTimeInfo);friend void Show_24(CTimeInfo);private:int Hour,Minute;void Show_12(CTimeInfo d)if(d.Hour=12)coutam d.Hour:d.Minuteendl;elsed.Hour-=12; coutpm d.Hour:d.Minuteendl;void Show_24(CTimeInfo d)coutd.Hour:d.Minuteendl;int main()CTimeInfo d1,d2(21,8);Show_12(d1);Show_12(d2);Show_24(d2);return 0;3. 定义一个Student类,在该类定义中包括:一个数据成员score(分数)及两个静态数据成员total(总分)和count(学生人数) 。成员函数:scoretotalcount(float s)用于设置分数、求总分和累计学生人数;静态成员函数sum用于返回总分;静态成员函数average用于求平均分。在main函数中,创建三名学生,并调用上述函数求这三名学生的总分和平均分。参考程序:#include class Studentpublic: void scoretotalcount(float s) score=s; total+=score; count+; static float sum() return total; static float average() return total/count; private: float score; static float total; static int count;float Student:total=0;int Student:count=0;void main() Student s1,s2,s3; s1.scoretotalcount(70); s2.scoretotalcount(80); s3.scoretotalcount(90); couttotal:Student:sum()endl; coutaverage:Student:average()endl;4. 编写程序实现宾馆住宿客人管理。定义客人类Guest,包含客人编号Num(按先后顺序自动生成)、姓名Name、住宿房号Room、房费fee,并定义静态成员Count,用于记录客人总数;提供构造函数,显示信息函数Display,以及返回客人总数函数GetCount等。在主函数中创建3个客人对象进行测试。参考程序:#include #include using namespace std;class Guestpublic:Guest(string n,string r,double f)Num=+Count;Name=n;Room=r;fee=f;void display()coutNum Name Room feeendl;static int GetCount()return Count;private:int Num;string Name;string Room;double fee;static int Count;int Guest:Count=0;int main()Guest g1(zhang,101,200);Guest g2(li,201,300);Guest g3(wang,301,500);g1.display();g2.display();g3.display();coutTotal=Guest:GetCount()endl;return 0;5. 生成一个复数类Complex。复数的实部和虚部分别为double 型x和y。重载运算符加、减、乘、除为类的成员函数,用来计算两个复数的加、减、乘、除运算。参考程序:#include class complex private:double x,y; public:complex(double xx=0,double yy=0)x=xx;y=yy;void display() cout(x,yi)endl;complex operator +(complex &c1);complex operator -(complex &c1); complex operator *(complex &c1); complex operator /(complex &c1);complex complex:operator +(complex &c1)complex c;c.x=x+c1.x;c.y=y+c1.y;return c;complex complex:operator -(complex &c1)complex c;c.x=x-c1.x;c.y=y-c1.y;return c;complex complex:operato

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论