CII习题及其解答第版.docx
- 文档编号:6952511
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:39
- 大小:33.53KB
CII习题及其解答第版.docx
《CII习题及其解答第版.docx》由会员分享,可在线阅读,更多相关《CII习题及其解答第版.docx(39页珍藏版)》请在冰豆网上搜索。
CII习题及其解答第版
习题及其解答
第5章类与对象
5.1选择题
第7章1.在下列结构变量的定义中,不正确的是(d)。
第8章
第9章
第10章(a)structemployee
{charname[20];
longcode;
}emp;
(b)struct
{charname[20];
longcode;
}emp;
(c)structemployee
{charname[20];
longcode;
};
employeeemp;
(d)struct
{charname[20];
longcode;
}employee;
employeeemp;
2.已知有职工情况结构变量emp定义为:
structemployee
{charname[20];
longcode;
struct
{intyear;
intmonth;
intday;
}birth;
}emp;
下列对emp的birth正确赋值方法是(d)。
(a)year=1980;month=5;day=1;
(b)birth.year=1980;birth.month=5;birth.day=1;
(c)emp.year=1980;emp.month=5;emp.day=1;
(d)emp.birth.year=1980;emp.birth.month=5;emp.birth.day=1;
3.假定有以下声明和定义,则下面引用形式错误的是(b)。
structstudent
{intnum;
floatscore;
}stu[3]={{1001,80},{1002,75},{1003,91}},*p=stu;
(a)p->num(b)(p++).num(c)(p++)->num(d)(*p).num
4.下列四个运算符中,优先级最低的是(a)。
(a)++(b).(c)->(d)()
5.若有以下声明和定义,则下列错误的引用是(d)。
structworker
{intno;
charname[20];
}w,*p=&w;
(a)w.no(b)p->no(c)(*p).no(d)*p.no
6.若有以下声明和定义,则下列引用非法的是(d)。
structdata
{intn;
floatscore;
data*q;
};
dataa[3]={1001,87,&a[1],1002,75,&a[2],1003,90,&a[0]};
data*p=a;
(a)p->n++(b)(*p).n++(c)++p->n(d)*p->n
7.关于类和对象不正确的说法是(c)。
(a)类是一种类型,它封装了数据和操作(b)对象是类的实例
(c)一个类的对象只有一个(d)一个对象必属于某个类
8.在类定义的外部,可以被访问的成员有(c)。
(a)所有类成员(b)private或protected的类成员
(c)public的类成员(d)public或private的类成员
9.关于this指针的说法错误的是(a,d)。
(a)this指针必须显式说明
(b)当创建一个对象后,this指针就指向该对象
(c)成员函数拥有this指针
(d)静态成员函数拥有this指针
10.声明一个类的对象时,系统自动调用(b,d)函数;撤消对象时,系统自动调用(c)函数。
(a)成员函数(b)构造函数(c)析构函数(d)复制构造函数
11.下面对构造函数的不正确描述是(b)。
第11章(a)系统可以提供默认的构造函数
(b)构造函数可以有参数,所以也可以有返回值
(c)构造函数可以重载
(d)构造函数可以设置默认参数
12.下面对析构函数的正确描述是(a,c)。
(a)系统可以提供默认的析构函数(b)析构函数必须由用户定义
(c)析构函数没有参数(d)析构函数可以设置默认参数
13.对静态成员的不正确描述是(c,d)。
(a)静态成员不属于对象,是类的共享成员
(b)静态数据成员要在类外定义和初始化
(c)调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
(d)只有静态成员函数可以操作静态数据成员
14.下面选项中,不是类的成员函数为(c)。
(a)构造函数(b)析构函数(c)友元函数(d)复制构造函数
15.下面对友员的错误描述是(d)。
(a)关键字friend用于声明友员
(b)一个类中的成员函数可以是另一个类的友员
(c)友员函数访问对象的成员不受访问特性影响
(d)友员函数通过this指针访问对象成员
5.2阅读下列程序,写出执行结果
4.#include
classA
{public:
intf1();
intf2();
voidsetx(intm){x=m;cout< voidsety(intn){y=n;cout< intgetx(){returnx;} intgety(){returny;} private: intx,y; }; intA: : f1(){returnx+y;} intA: : f2(){returnx-y;} voidmain() {Aa; a.setx(10);a.sety(5); cout< cout< } 答案: 10 5 105 155 5.#include classT {public: T(intx,inty) {a=x;b=y; cout<<"调用构造函数1."< cout< } T(T&d) {cout<<"调用构造函数2."< cout< } ~T(){cout<<"调用析构函数."< intadd(intx,inty=10){returnx+y;} private: inta,b; }; voidmain() {Td1(4,8); Td2(d1); cout< } 答案: 调用构造函数1. 48 调用构造函数2. 48 20 调用析构函数. 调用析构函数. 6.#include classT {public: T(intx){a=x;b+=x;}; staticvoiddisplay(Tc) {cout<<"a="< private: inta; staticintb; }; intT: : b=5; voidmain() {TA(3),B(5); T: : display(A); T: : display(B); } 答案: a=3b=13 a=5b=13 7.#include #include classpoint {public: point(floatx,floaty) {a=x;b=y;cout<<"点("< frienddoubled(point&A,point&B) {returnsqrt((A.a-B.a)*(A.a-B.a)+(A.b-B.b)*(A.b-B.b));} private: doublea,b; }; voidmain() {pointp1(2,3); cout<<"到"; pointp2(4,5); cout<<"的距离是: "< } 答案: 点(3,4)到点(4,5)的距离是: 2.82843 8.#include classA {public: A(){a=5;} voidprinta(){cout<<"A: a="< private: inta; friendclassB; }; classB {public: voiddisplay1(At) {t.a++;cout<<"display1: a="< voiddisplay2(At) {t.a--;cout<<"display2: a="< }; voidmain() {Aobj1; Bobj2; obj1.printa(); obj2.display1(obj1); obj2.display2(obj1); obj1.printa(); } 答案: A: a=5 display1: a=6 display2: a=4 A: a=5 5.3编程题 6.定义一个Book(图书)类,在该类定义中包括 数据成员: bookname(书名)、price(价格)和number(存书数量); 成员函数: display()显示图书的情况;borrow()将存书数量减1,并显示当前存书数量;restore()将存书数量加1,并显示当前存书数量。 在main函数中,要求创建某一种图书对象,并对该图书进行简单的显示、借阅和归还管理。 解答: #include #include #include classBook {public: voidsetBook(char*,float,int); voidborrow(); voidrestore(); voiddisplay(); private: charbookname[40]; floatprice; intnumber; }; //在类外定义Book类的成员函数 voidBook: : setBook(char*name,floatpri,intnum) {strcpy(bookname,name); price=pri; number=num; } voidBook: : borrow() {if(number==0) {cout<<"已没存书,退出! "< abort(); } number=number-1; cout<<"借一次,现存书量为: "< } voidBook: : restore() {number=number+1; cout<<"还一次,现存书量为: "< } voidBook: : display() {cout<<"存书情况: "< <<"bookname: "< <<"price: "< <<"number: "< } voidmain() {charflag,ch; Bookcomputer; computer.setBook("c++程序设计基础",32,1000); computer.display(); ch='y'; while(ch=='y') {cout<<"请输入借阅或归还标志(b/r): "; cin>>flag; switch(flag) {case'b': computer.borrow();break; case'r': computer.restore(); } cout<<"是否继续? (y/n)"; cin>>ch; } computer.display(); } 7.定义一个Box(盒子)类,在该类定义中包括 数据成员: length(长)、width(宽)和height(高); 成员函数: 构造函数Box设置盒子长、宽和高三个初始数据;函数volume计算并输出盒子的体积。 在main函数中,要求创建Box对象,并求盒子的体积。 解答: 略。 8.定义一个Student类,在该类定义中包括: 一个数据成员score(分数)及两个静态数据成员total(总分)和学生人数count;成员函数scoretotalcount(floats)用于设置分数、求总分和累计学生人数;静态成员函数sum()用于返回总分;静态成员函数average()用于求平均值。 在main函数中,输入某班同学的成绩,并调用上述函数求全班学生的总分和平均分。 解答: 类声明如下,实现代码略。 classstudent {public: voidscoretotalcount(float); staticfloatsum(); staticfloataverage(); private: floatscore; staticfloattotal; staticfloatcount; }; floatstudent: : total=0; floatstudent: : count=0; 9.定义一个表示点的结构类型Point和一个由直线方程y=ax+b确定的直线类Line。 结构类型Point有x和y两个成员,它们分别表示点的横坐标和纵坐标。 Line类有两个数据成员a和b,它们分别表示直线方程中的系数a和b。 Line类有一个成员函数print用于显示直线方程;友员函数setPoint(Line&l1,Line&l2)用于求两条直线的交点。 在main函数中,建立两个直线对象,分别调用print函数显示两条直线的方程,并调用函数setPoint求这两条直线的交点。 解答: 结构和类声明如下,实现代码略。 structPoint//点结构 { floatx;floaty; }; classLine//线类 {public: line(float,float);//构造函数 voidprint()//显示直线方程 friendpointsetpoint(line&l1,line&l2);//求两条直线交点 private: floata,b; }; 第6章运算符重载 6.1选择题 1.在下列运算符中,能重载的是(a,c,d)。 (a)! (b)sizeof(c)new(d)delete 2.在下列运算符中,不能重载的是(c)。 (a)<=(b)>>(c)&&(d)&= 3.下列关于运算符重载的描述中,(d)是正确的。 (a)可以改变参与运算的操作数个数(b)可以改变运算符原来的优先级 (c)可以改变运算符原来的结合性(d)不能改变原运算符的语义 4.下列函数中,能重载运算符的函数是(b,c)。 (a)成员函数(b)构造函数(c)析构函数(d)友员函数 5.不能用友员函数重载的是(a)。 (a)=(b)==(c)+=(d)! = 6.下面描述中,错误的是(b)。 (a)只有系统预先定义的运算符才可能被重载 (b)使用类型转换函数不能把一个类转换为另一个类 (c)使用类型转换函数可以把类转换为基本类型 (d)类型转换函数只能定义为一个类的成员函数,不能定义为类的友员函数 6.2阅读下列程序,写出执行结果 1.#include classT {public: T(){a=0;b=0;c=0;} T(inti,intj,intk) {a=i;b=j;c=k;} voidget(int&i,int&j,int&k) {i=a;j=b;k=c;} Toperator*(Tobj); private: inta,b,c; }; TT: : operator*(Tobj) {Ttempobj; tempobj.a=a*obj.a; tempobj.b=b*obj.b; tempobj.c=c*obj.c; returntempobj; } voidmain() {Tobj1(1,2,3),obj2(5,5,5),obj3; inta,b,c; obj3=obj1*obj2; obj3.get(a,b,c); cout<<"(obj1*obj2): \t"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CII 习题 及其 解答
![提示](https://static.bdocx.com/images/bang_tan.gif)