面向对象B卷.docx
《面向对象B卷.docx》由会员分享,可在线阅读,更多相关《面向对象B卷.docx(13页珍藏版)》请在冰豆网上搜索。
![面向对象B卷.docx](https://file1.bdocx.com/fileroot1/2023-1/26/b74d18cb-3951-40c0-a89c-b08957176101/b74d18cb-3951-40c0-a89c-b089571761011.gif)
面向对象B卷
(所有答案必须填写在答题纸上,写在试卷上无效。
不能拆散试卷。
)
一、选择题(每题2分,共2×20=40分)
1.下面有关类说法不正确的是()
A.一个类可以有多个构造函数B.一个类只有一个析构函数
C.析构函数需要指定参数D.一个类中可以说明具有类类型的数据成员
2.假定一个类的构造函数为“A(intaa,intbb){a=aa;b=aa*bb;}”,则执行“Ax(4,5);”语句后,x.a和x.b的值分别为()。
A.4和5B.5和4C,4和20D.20和5
3.假定AB为一个类,则执行“ABa[10];”语句时调用该类无参构造函数的次数为()。
A.0B.1C.9D.10
4.假定M为一个类,则该类的拷贝构造函数的声明语句为()
A.M&(Mx);B.M(Mx);C.M(M*x);D.M(M&);
5.下列带缺省值参数的函数说明中,正确的说明是()
A.intFun(intx,inty=2,intz=3);
B.intFun(intx=1,inty,intz=3);
C.intFun(intx,inty=2,intz);
D.intFun(intx=1,inty=2,intz);
B
6.以下程序段的输出是()
inttrial(int&a,intb)
{
if(b>a){a=b;return–a;}
else{return0;}
}
floatx=0,y=10,z;
z=trial(y,x);
cout<A.–1000B.0100C.1000D.0010
7.文件流outFile已连接了文件project.txt,正确关闭文件流outFile的语句是()
A.outFile.close;B.outFile.close();
C.outFile.close("project.txt");D.close(outFile);
8.以下哪一个函数声明即可以接收cin流,又可以接收输入文件流()
A.voidinput(fstream&inFile);
B.voidinput(istream&inFile);
C.voidinput(ifstream&inFile);
D.voidinput(iostream&inFile);
9.给出类和对象的声明,正确输出bottle对象的数据成员age和cost的是()
classWine
{public:
Wine();
intgetAge();
floatgetCost();
private:
intage;
floatcost;
}
Winebottle;
A.cout<B.cout<C.cout<D.cout<10.以下选项中哪一个函数声明能保证函数执行后不改变形参表中数组的值()
A.voidf1(intarray[],intsize)const;
B.voidf1(intarray[],intsize);
C.voidf1(constintarray[],intsize);
D.voidf1(int&array,intsize);
11.以下代码段的输出是什么?
()
int*p1,*p2;
p1=newint;
p2=newint;
*p1=11;
*p2=0;
p2=p1;
cout<<*p1<<""<<*p2<A.110B.011C.1111D.00
B
12.以下语句中,能够正确地从一个输入文件流fin中读一整行并存放到类string的对象line中的是()
A.getline(fin,line);B.fin.getline(line);
C.fin.getline(line,'\n\');D.fin.getline(line,10);
13.p1是指向动态数组的指针,哪一个能够正确地释放p1所指向的内存空间()
A.delete[]p1;B.deletep1[];
C.delete*p1;D.deletep1;
14.下面函数模板定义中不正确的是()
A.templateB.template
QF(Qx){QF(Qx){
returnx*2;returnx+x;
}}
C.templateD.template
TF(Tx){TF(Tx){
returnx*x;returnx+T;
}
15.给出如下代码段,哪一条语句正确地给链表的头节点分配内存空间()
structNode{intitem;Node*link;};
typedefNode*NodePtr;
NodePtrhead;
A.head=newNode;B.head=newint;
C.head->link=NULL;D.head=newNodePtr;
16.执行以下代码,输出的内容是()
classPet
{public:
virtualvoidprint();
stringname;
};
classDog:
publicPet
{public:
voidprint();
stringbreed;
};
voidPet:
:
print()
{cout<<"Mynameis"<voidDog:
:
print()
{Pet:
:
print();cout<<",andmybreedisa"<Pet*pPtr;
Dog*dPtr=newDog;
dPtr->name="Rover";
dPtr->breed="Weiner";
pPtr=dPtr;
pPtr->print();
A.MynameisRover,andmybreedisaWeiner
B.MynameisRover
C.,andmybreedisaWeiner
D.无输出
17.以下输入操作符重载函数的声明错在哪里?
()
B
istream&operator>>(istream&in,constmyClass&object);
A.对象不应该是传引用调用B.对象不应该是常量参数
C.返回类型不应该是引用D.没错
18.在公有派生的情况下,有关派生类的对象和基类的对象之间的关系,不正确的叙述是()
A.派生类的对象可以赋给基类的对象
B.派生类的对象可以直接访问基类中的成员
C.派生类的对象可以初始化基类的引用
D.派生类的对象的地址可以赋给指向基类的指针
19.一个一元操作符重载为类的友元函数时,参数的个数是?
()
A.0B.1C.2D.按需设置
20.以下关于析构函数的说法正确的是()
A.一个类中只能定义一个析构函数;B.析构函数有返回值;
C.析构函数的定义只能在类体内;D.析构函数可以有1个或多个参数。
二、填空题(每题2分,共2×5=10分)
1.面向对象程序设计的三大基本特性是继承性、_______、封装性。
2.用关键字_______声明的函数称为虚函数。
3.当一个类对象离开它的作用域时,系统将自动调用该类的__________函数。
4.假定AB为一个类,则执行"ABa[5];"语句时,系统自动调用该类构造函数的次数为_____________________。
5.假定要动态分配一个类型为Worker的具有m个元素的数组,并由r指向这个动态数组,则使用的语句为_________________________。
三、读程序,写结果(每题5分,共5×4=20分)
1.#include
#include
usingnamespacestd;
classPoint
{intx,y;
public:
Point(){x=1;y=1;}
Point(inttx,intty){x=tx;y=ty;}
~Point(){cout<<"Point:
"<};
voidmain()
{
Pointobj1;
Pointobj2(10,20);
}
2.#include
usingnamespacestd;
classMyClass
{
public:
intnumber;
voidset(inti);
};
B
voidMyClass:
:
set(inti)
{
number=i;
}
voidmain()
{
MyClassmy1;
intnumber=10;
my1.set(5);
cout<my1.set(number);
cout<}
3.#include
usingnamespacestd;
voidsample_function(doubletest)throw(int);
intmain()
{
try{
cout<<“Trying.\n”;
sample_function(212);
cout<<“Tryingaftercall.\n”;
}
catch(int)
{
cout<<“Catching.\n”;
}
cout<<“Endofprogram.\n”;
return0;
}
voidsample_function(doubletest)throw(int)
{cout<<”Startingsample_function.\n”;
if(test<100)throw42;
}
4.#include
classA
{
public:
A(){cout<<"A:
:
A()called.\n";}
virtual~A(){cout<<"A:
:
~A()called.\n";}
};
classB:
publicA
{public:
B(inti){ cout<<"B:
:
B()called.\n"; buf=newchar[i];}
virtual~B()
{delete[]buf; cout<<"B:
:
~B()called.\n";}
private:
char*buf;
};
voidfun(A*a)
{deletea; }
B
voidmain()
{A*a=newB(15);
fun(a);
}
四、按要求写程序(共30分)
1.下面是一个复数类ComplexB的声明,请完成各构造函数和运算符重载函数的实现,并编写主函数main(),使用以上的构造函数和重载运算符函数(10分)。
classComplexB
{
private:
doublereal,imag;
public:
ComplexB(doublei=0,doublej=0);
friendistream&operator>>(istream&ins,ComplexB&c);
ComplexBoperator+(ComplexB&c1);
};
2.定义抽象类Shape,它派生出两个类:
Square(正方形)和Trapezoid(梯形),用虚函数分别计算各种图形的面积。
并在主函数中定义如下对象:
Squares(3.5);//3.5为正方形的边长
Trapezoidt(2.0,4.5,3.2);//2.0,4.5,3.2分别为梯形的上底、下底和高
求出它们的面积之和,并输出。
要求用基类指针数组,使它的每一个元素指向一个派生类的对象(20分)。