C++期末热身第二部分.docx
- 文档编号:6102533
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:31
- 大小:167.51KB
C++期末热身第二部分.docx
《C++期末热身第二部分.docx》由会员分享,可在线阅读,更多相关《C++期末热身第二部分.docx(31页珍藏版)》请在冰豆网上搜索。
C++期末热身第二部分
C++:
第二部分
、选择题
1下列对派生类的描述中,(4)是错误的。
1一个派生类可以作为另一个派生类的基类
2派生类至少有一个基类
1派生类的成员除了它自已的成员外,还包含了它的基类的成员
2派生类中继承的基类成员的访问权限在派生类中保持不变
2、对基类和派生类的描述中,(4)是错的。
1派生类是基类的具体化②派生类是基类的子集
3派生类是基类定义的延续④派生类是基类的组合
3、派生类的构造函数的成员初始化列表中,不能包含
(2)。
1基类的构造函数②派生类中子对象的初始化
3基类的子对象初始化④派生类中一般数据成员的初始化
4、设置虚基类的目的是
(2)。
①简化程序②消除二义性③提高运行效率④减少目标代码
5、关于子类型的描述中,(4)是错的。
1子类型就是指派生类是基类的子类型
2一种类型当它至少提供了另一种类型的行为,则这种类型是另一种类型的子类型
3在公有继承下,派生类是基类的子类型
4子类型关系是不可逆的
6、已知一个类A,(3)是指向类A成员函数的指针。
假设类A有3个公有成员:
Voidf1(int),voidf2(int)和inta。
①A*p;②intA:
:
*pc=&A:
:
a;③voidA:
:
*pa();④A*pp;
7、已知f1(int)是类A的公有成员函数,p是指向成员函数f1()的指针,采用
(2)是
正确的
①p=f1;②p=A:
:
f1;③p=A:
:
f1();④p=f1();
8已知:
p是一个指向类A数据成员m的指针,a1是类A的一个对象。
如果要给m赋值为5,(3)是正确的。
①a1.p=5;②a1->p=5;③a1.*p=5;④*a1.p=5;
9、已知类A中一个成员函数说明如下:
voidSet(A&a)
其中,A&a的含意是(3)。
1指向类A的指针为a
2将A的地址值赋给变量Set
3a是类A的对象的引用,用来作函数Set()的形参
4变量A与a按位相与作为函数Set()的参数
10、有以下类的说明,请指出错误的地方ABCDclassCSample{
private:
(A)
inta=2.5;
CSample;(B)
public:
CSample(intval);(C)
~CSample;(D)
};
11、下面程序的输出结果是
(1)
#includeviostream>
usingnamespacestd;
classpoint
{
public:
voidpoi(intpx=10,intpy=10)
{x=px;y=py;}
getpx()
{returnx;}
getpy()
{returny;}
private:
intx,y;
};
intmain()
{
pointp,q;
p.poi();
q.poi(15,15);
coutvv“p点的坐标是:
”vvp.getpx()vv“,”;coutvvp.getpy()vvendl;
coutvv“q点的坐标是:
”vvq.getpx()vv“,”;
coutvvq.getpy()vvendl;
return0;
个常量指针
而不能被赋值
}
①p点的坐标是:
10,10②
p点的坐标是:
0,0
q点的坐标是:
15,15
q点的坐标是:
15,15
③
p点的坐标是:
0,0④
p点的坐标是:
10,10
q点的坐标是:
0,0
q点的坐标是:
10,10
12、
下列关于对象数组的描述中,
(4)是错误的。
1对象数组的下标是从0开始的②对象数组的数组名是-
2对象数组的每个元素是同一个类的对象④对象数组只能赋初值,
13、下列定乂中,
(2)是定乂指向数组的指针p。
①int*p[5]②int(*p)[5]③(int*)p[5]④int*p[]
14、具有转换函数功能的构造函数,应该是
(2)。
①虚析构函数②虚构造函数③纯虚函数④静态成员函数
22、如果一个类至少有一个纯虚函数,那么就称该类为
(1)。
①抽象类②虚基类③派生类④以上都不对
二、判断题
1、一个类的构造函数中可以不包含对其子对象的初始化。
(T)
2、派生类是从基类派生出来,它不能再生成新的派生类。
(F)
3、在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。
(F)
4、单继承情况下,派生类中对基类成员的访问也会出现二义性。
(F)
5、构造函数可以被继承。
(T)
6、析构函数不能被继承。
(F)
7、解决多继承情况下出现二义性的方法之一是使用成员名限定法。
(T)
&子类型是不可逆的。
(F)
9、派生类是它的基类的组合。
(F)
/10、只要是类M继承了类N,就可以说类M是类N的子类型。
(T)
11、如果A类型是B类型的子类型,则A类型必然适应于B类型。
(T)
12、重载运算符保持原运算符的优先级和结合性不变。
(T)
13、构造函数说明为纯虚函数是没有意义的。
(T)
14、抽象类是指一些没有说明对象的类。
(F)
15、动态联编是在运行时选定调用的成员函数的。
(T)
三、填空题
1、以下程序的执行结果是。
#includeviostream>usingnamespacestd;classSample{intx;public:
voidsetx(inti){x=i;}intputx(){returnx;}
};
intmain()
{
Sample*p;
SampleA[3];
A[0].setx(5);
A[1].setx(6);
A[2].setx(7);
for(intj=0;j<3;j++)
{
P=&A[j];
coutvvp->putx()vv”;
}
coutvvendl;
return0;
}
2、以下程序的执行结果是构造函数。
i=10
i=20
#includeviostream>usingnamespacestd;classSample{public:
Sample(){coutvv"构造函数。
"vvendl;
}
};
voidfn(inti)
{
staticSamplec;
coutvv”="vvivvendl;
}
intmain()
{
fn(10);
fn(20);return0;
}
3、以下程序的执行结果是x=5。
#includeviostream>
usingnamespacestd;
classA
{
public:
intx;
voidfun(inti){x=i;}
};
intmain()
{
Ac;
intA:
:
*p=&A:
:
x;
c.*p=2;
void(A:
:
*pfun)(int)=A:
:
fun;
(c.*pfun)(5);
cout<<"x="vvc.xvvendl;
return0;
}
4、以下程序的执行结果是fun1:
7
fun2:
15。
#includeviostream>usingnamespacestd;
classA
{
public:
intx;
A(inti){x=i;}
voidfun1(intj){x+=j;coutvv"funl:
"vvxvvendl;}voidfun2(intj){x+=j;coutvv"fun2:
"vvxvvendl;}};
intmain()
{
Ac1
(2),c2(5);
void(A:
:
*pfun)(int)=A:
:
fun1;
(c1.*pfun)(5);
pfun=A:
:
fun2;
(c2.*pfun)(10);return0;
}
5、以下程序的执行结果是97
#includeviostream>
usingnamespacestd;classSample
{
intx;
public:
Sample(){};
voidsetx(inti){x=i;}friendintfun(SampleB[|,intn){
intm=0;
for(inti=0;i if(B[i].x>m)m=B[i].x; returnm; } }; intmain() { SampleA[1O]; intArr[]={90,87,42,78,97,84,60,55,78,65};for(inti=O;i<1O;i++) A[i].setx(Arr[i]); coutvvfun(A,1O)vvendl;return0; } 6、以下程序的执行结果是_1 3。 #includeviostream> usingnamespacestd; classA { inta; public: voidseta(intx){a=x;}voidshowa(){coutvvavvendl;}}; classB { intb; public: voidsetb(intx){b=x;}voidshowb(){coutvvbvvendl;}};classC: publicA,privateB{private: intc; public: voidsetc(intx,inty,intz) { c=z;seta(x);setb(y); } voidshowc(){coutvvcvvendl;} }; intmain(){ Cc; c.seta (1); c.showa();c.setc(1,2,3);c.showc();return0; } 7、以下程序的执行结果是(1,2) 5.6 (69#includeviostream>usingnamespacestd; classA { public: A(inti,intj){a=i;b=j;}voidmove(intx,inty){ a+=x;b+=y; } voidshow() {coutvv”vvavv”"vvbvv”"vvendl; }private: inta,b; }; classB: privateA { public: B(inti,intj,intk,intl): A(i,j) { x=k;y=l; } voidshow() { coutvvxvv”"vvyvvendl; } voidfun(){move(3,5);} voidf1(){A: : show();}private: intx,y; }; intmain() { Ae(1,2); e.show(); Bd(3,4,5,6); d.fun(); d.show(); d.f1();return0; } 8以下程序的执行结果是a=0b=0c=0 a=1b=0c=0a=1b=3c=0a=1b=3c=5 #includeviostream> usingnamespacestd; classA { public: A(){a=0;b=0;} A(inti){a=i;b=0;} A(inti,intj){a=i;b=j;} voiddisplay(){coutvv"a="vvavv"b="vvb;}private: inta; intb; }; classB: publicA {public: B(){c=O;} B(inti): A(i){c=0;} B(inti,intj): A(i,j){c=O;} B(inti,intj,intk): A(i,j){c=k;} voiddisplay") {display。 ;coutvv"c="vvcvvendl; }private: intc; }; intmain() {Bb1; Bb2 (1); Bb3(1,3); Bb4(1,3,5); b1.display1(); b2.display1(); b3.display1(); b4.display1(); return0; } 9、以下程序的执行结果是30,30 #includeviostream> usingnamespacestd;classPoint { intx,y; public: Point(intvx,intvy){x=vx;y=vy;} Point(){x=0;y=0;} Pointoperator+(Pointp1) { Pointp; intpx=x+p.x; intpy=y+p.y;returnPoint(px,py); } Pointoperator-(Pointp1) Pointp; intpx=x-p1.x; intpy=y-p1.y; returnPoint(px,py); } voidprint() { coutvvxvv””,vvyvvendl; } }; intmain() { Pointp1(10,10),p2(20,20); p1=p1+p2; p1.print();return0; } 10、以下程序的执行结果是baseclass deriveclass derive2class#includeviostream>usingnamespacestd; classbase {public: virtualvoidwho(){ coutvv"baseclassvvendl; } }; classderive: publicbase {public: voidwho(){ coutvv"deriveclass"vvendl; } }; classderive2: publicbase { public: voidwho() { coutvv"derive2class"vvendl; }; intmain(){ baseobj1,*p;deriveobj2;derive2obj3;p=&obj1;p->who();p=&obj2;p->who();p=&obj3;p->who();return0; f1functionofbasef2functionofbasef3functionofbasef1functionofderivef2functionofbasef4functionofderive #include { public: virtualvoidf1() { cout<<"f1functionofbase"< } virtualvoidf2() { cout<<"f2functionofbase"< } virtualvoidf3() { cout<<"f3functionofbase"< } virtualvoidf4() { cout<<"f3functionofbase"< }; classderive: publicbase { voidf1() { coutvv”1functionofderive”vvendl; } voidf2(intx) { cout<<”2functionofderive”< } voidf4() { cout<<”4functionofderive”< } }; intmain() { baseobj1,*p; deriveobj2; p=&obj1; P->f1(); p->f2(); p->f3(); p=&obj2; p->f1(); p->f2(); p->f4(); return0; } 12、以下程序的执行结果是(10,20) (13,23) (16,26) #includeviostream.h> classPoint { public: Point(){x=0;y=0;} Point(unsignedx,unsignedy) { Point: : x=x; Point: : y=y; } unsignedgetx(){returnx;} unsignedgety(){returny;} voidprint() {coutvv"Point( } friendPointoperator+(Point&pt,intnoffset);friendPointoperator+(intnoffset,Point&pt); private: unsignedx,y; }; Pointoperator+(Point&pt,intnoffset) { Pointptemp=pt; ptemp.x+=noffset; ptemp.y+=noffset; returnptemp; } Pointoperator+(intnoffset,Point&pt) { Pointptemp=pt; ptemp.x+=noffset; ptemp.y+=noffset; returnptemp; } intmain() { Pointpt(10,20); pt.print(); pt=pt+3; pt.print(); pt=3+pt; pt.print(); return0; } 四、程序分析题 1、分析下列程序的输出结果(注: 除了给出结果外,还要进行简单分析) #includeviostream> usingnamespacestd; classL { public: voidInitL(intx,inty){X=x;Y=y;} voidMove(intx,inty){X+=x;Y+=y;} intGetX(){returnX;} intGetY(){returnY;} private: intX,Y; }; classR: publicL { public: voidInitR(intx,inty,intw,inth) { lnitL(x,y); W=w; H=h; } intGetW(){returnW;} intGetH(){returnH;} private: intW,H; }; classV: publicR { public: voidfun(){Move(3,2);} }; intmain() { Vv; v.InitR(10,20,30,40); v.fun(); cout<<” return0; } 运行结果: {13,22,30,40} 2、分析下列程序的输出结果(注: 除了给出结果外,还要进行简单分析) #includeviostream> usingnamespacestd; classB { public: B(){} B(inti){b=i;} virtualvoidvirfun() { coutvv"B: : virfun()called.\n” } private: intb; }; classD: publicB { public: D(){} D(inti,intj): B(i){d=j;} private: intd; voidvirfun() { cout<<"D: : virfun()called.\n” } }; voidfun(B*obj) { obj->virfun(); } intmain() { D*pd=newD; fun(pd);return0; } 运行结果: D: : virfun()called. 3、分析下列程序的输出结果 #includeviostream> usingnamespacestd; classA { public: A(inti,intj){a=i;b=j;} voidMove(intx,inty){a+=x;b+=y;} voidShow(){coutvv”Vvavv”"vvbvv”)"vvendl;private: inta,b; }; classB: publicA { public: B(inti,intj,intk,intl): A(i,j),x(k),y(l){} voidShow(){coutvvxvv'"''vvyvvendl;} voidfun(){Move(3,5);} voidf1(){A: : Show();} private: intx,y; }; intmain() { Ae(1,2); e.Show(); Bd(3,4,5,6); d.fun(); d.A: : Show(); d.B: : Show(); d.f1();return0; } 运行结果: (1,2) (6,9) (5,6) (6,9) 4、阅读程序,回答下列问题。 classA { public: voidf(); }; classB: virtualpublicA { public: voidf(); }; classC: publicB { }; classD: publicC,virtualpublicA { public: voidg(); }; (1)设有Dd;问: d.f()是否有二义性? (2)设有 voidD: : g() { f(); } 问: g()函数中对f()调用是否有二义性? 5、阅读程序,写出执行结果并进行简要分析。 #in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 期末 热身 第二 部分