08092C++2试题B含答案16.docx
- 文档编号:11579115
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:17
- 大小:218.89KB
08092C++2试题B含答案16.docx
《08092C++2试题B含答案16.docx》由会员分享,可在线阅读,更多相关《08092C++2试题B含答案16.docx(17页珍藏版)》请在冰豆网上搜索。
08092C++2试题B含答案16
姓名学号
学院专业座位号
(密封线内不答题)
……………………………………………………密………………………………………………封………………………………………线……………………………………线………………………………………
_____________________
…
诚信应考,考试作弊将带来严重后果!
华南理工大学期末考试2009-6-26
《高级语言程序设计
(2)》试卷B
注意事项:
1.考前请将密封线内各项信息填写清楚;
2.所有答案写在答题纸上,答在其它地方无效;
3.试卷可做草稿纸,试卷必须与答题纸同时提交;
4.考试形式:
闭卷;
5.本试卷共五大题,满分100分,考试时间120分钟。
一.单项选择题(每题2分,共20分)
1.下列有关C++构造函数,析构函数的说法正确的是(B)
A.系统提供默认的析构函数,不提供默认的构造函数
B.构造函数可以重载,析构函数不可以重载
C.构造函数可以提供默认参数,也可以提供返回值
D.析构函数不可以定义为虚函数
2.下列有关C++的this指针的说法正确的是(C)
A.定义一个类后,this指针就指向该类
B.调用静态成员函数会隐含传递this指针参数
C.友元函数没有this指针
D.this指针是隐含的,不能显式使用
3.只能用友元函数重载的运算符是(A)
A.<
4.在下列类声明
classCComplex{/*……*/};
能实现CComplex类型转换为CReal类型的函数是(C)
A.CComplex:
:
CComplex();B.CComplex:
:
CComplex(CReal);
C.CComplex:
:
operatorCReal();D.CComplex:
:
operatorCReal(Complex);
5.有关C++中继承的说法正确的是(B)
A.继承关系具备对称性和传递性
B.一个类可以有多个基类,也可以有多个派生类
C.一个基类不能有多个派生类,而一个派生类可以有多个基类
D.继承类层次中,基类的构造函数和析构函数都不能声明为虚的
6.有如下代码
ClassCBase{public:
voidprint();};
ClassCDerived:
publicCBase{public:
voidprint();};
voidmain(){CDerivedd;CDerived*ptr=&d;/*……*/}
能正确调用Cbase类中print()方法的语句是(C)
A.d.print()B.CBase:
:
print()
C.ptr->CBase:
:
print()D.ptr->print()
7.如果CInterface是抽象类,下列语句错误的是(A)
A.CInterfaceobj;B.CInteface*getInterface();
C.CInterface*ptr;D.char*getName(CInterface&);
8.针对如下代码段,正确的说法是(D)
ClassCInterface
{public:
virtualconstchar*getID()const=0;/*……*/}
A.CInterface是抽象类B.getID函数是纯虚函数
C.getID函数没有执行代码D.A,B,C说法都正确
9.对如下类模板错误使用是(A)
template
A.CArrayany;
B.CArray
C.doubleget(constTany
D.template
10.用于处理字符串流的是(A)
A.strstreamB.iosC.fstreamD.iosteam
二.阅读下列程序,写出执行结果(每题6分,共24分)
1.//输入输出流
#include
#include
#include
voidmain()
{charch='a';
ofstreamoutfile;
outfile.open("f.txt");
if(!
outfile)
{cout<<"f.txtcannotopen!
"< while(ch<='f') {outfile< } outfile.close(); fstreaminfile("f.txt",ios: : in); while(infile>>ch) cout< cout< } 答案: defghi 2.//虚函数、继承性与多态性 #include classBase {public: virtualvoidf() {cout<<"Base"< }; classSubClass: publicBase {public: virtualvoidf() {cout<<"SubClass"< }; voidtest(Base&b) {b.f();} voidmain() {Basebc; SubClasssc; test(bc); test(sc); } 答案: Base SubClass 3.//模板 #include constintNUM=4; template voidtraverse(Ta[]) {for(inti=0;i cout< } template voidbubbleSort(Ta[]) {for(inti=0;i for(intj=i+1;j if(a[i]>a[j])swap(a,i,j); } template voidswap(Ta[],inti,intk) {Ttemp; temp=a[i];a[i]=a[k];a[k]=temp; } voidmain() {inta[NUM]={4,3,2,1}; doubleb[NUM]={4.4,3.3,2.2,1.1}; bubbleSort(a); traverse(a); bubbleSort(b); traverse(b); } 答案: 1234 1.12.23.34.4 4.//浅复制、深复制与自定义复制构造函数。 #include #include className {public: Name(char*pn); Name(constName&Obj); ~Name(); protected: char*pName; intsize; }; Name: : Name(char*pn) {cout<<"Construct"< pName=newchar[strlen(pn)+1]; if(pName! =0)strcpy(pName,pn); size=strlen(pn); } Name: : Name(constName&Obj) {cout<<"Copy"< pName=newchar[strlen(Obj.pName)+1]; if(pName! =0)strcpy(pName,Obj.pName); size=Obj.size; } Name: : ~Name() {cout<<"Destruct"< pName[0]='\0'; delete[]pName; pName=NULL; size=0; } voidmain() {NameObj1("anne"); NameObj2=Obj1; } 答案: constructanne copyanneintointsownblock destructanne destructanne 三.简答题(每小题4分,共20分) 1.有以下程序: #include classX {private: inta;doubley; //…… }; voidmain() {cout< 执行结果如图1所示,这是否说明X: : a和X: : y占有存储空间? 类的数据成员是什么时候建立存储空间的? 举例说明,并请写一个初始化类X数据成员的函数。 不是。 创建对象时分配存储空间。 例如: 在main函数中有XXobj;在类定义中加入public: X(inta1=0,doubley1=0){a=a1;y=y1;},执行时创建对象Xobj,分配存储空间X.a,X.y。 2.有以下程序,类B是类A的派生类。 你认为该程序能够等价地定义为类B包含类A吗? 如果可以,请你写出类B的定义。 #include classA {inta; public: A(intaa){a=aa;} }; classB: publicA {intb; public: B(intaa,intbb): A(aa){b=bb;} voidout(){cout< }; voidmain() {Bx(1,2);x.out();} classB {intb;Aba; public: B(intaa,intbb): ba(aa){b=bb;} voidout(){cout< }; 3.有程序: #include classA {protected: inta; public: A(intaa){a=aa;} voidprint(){cout<<"a="< }; classX: publicA {protected: doubley; public: X(intaa,doubleyy): A(aa){y=yy;}