石河子大学 信息学院 c++期末考试 复习题Word下载.docx
《石河子大学 信息学院 c++期末考试 复习题Word下载.docx》由会员分享,可在线阅读,更多相关《石河子大学 信息学院 c++期末考试 复习题Word下载.docx(59页珍藏版)》请在冰豆网上搜索。
classA{
intT2;
T1fun(T2a){returna+T2;
C.template<
public:
T2b;
T1a;
A<
T1>
(){}
T1fun(){returna;
D.template<
T1fun(doublea){b=(T2)a;
return(T1)a;
}
};
(D)
4.假设p1,p2是STL中的list容器上的迭代器,那么以下语句哪个是不符合语法的
A.p1++;
B.p1--;
C.p1+=1;
D.intn=(p1==p2);
5.将一个对象放入STL中的容器里时:
A.实际上被放入的是该对象的一个拷贝(副本)
B.实际上被放入的是该对象的指针
C实际上被放入的是该对象的引用
D.实际上被放入的就是该对象自身
6.以下关于函数对象的说法正确的是:
A.函数对象所属的类将()运算符重载为一个成员函数
B.函数对象所属的类将[]运算符重载为一个成员函数
C.函数对象所属的类不能有成员变量
D.A和C都对
7.以下说法正确的是:
A.const成员函数内可以调用非const成员函数
B.在抽象类的某些成员函数中,可以出现调用纯虚函数的语句
C.静态成员函数也可以是虚函数
D.静态成员变量只能通过静态成员函数来访问
(B)
8.如果将运算符“*”重载为某个类的成员运算符(也即成员函数),则该成员函数的参数个数是:
A.0个B.1个C.2个D.根据实际作用不同,0个或1个都行
9.以下关于STL中stack类模板的正确说法是:
A.stack是关联容器
B.对于stack上的迭代器p,能够执行p++操作
C.stack可以用deque实现
D.可以用sort算法对stack进行排序
10.以下说法正确的是
A.在静态成员函数中调用虚函数是动态联编(多态)
B.在构造函数中调用虚函数,不是动态联编
C.抽象类的成员函数都是纯虚函数
D.构造函数和析构函数都不能是虚函数
二.以下程序编译、连接都能通过,请写出运行时输出的结果。
你认为没有输出的,就写"
无输出"
(共28分)。
1)4分
#include<
vector>
iostream>
usingnamespacestd;
classA{
private:
intnId;
public:
A(intn){
nId=n;
cout<
<
nId<
"
contructor"
<
endl;
~A(){
destructor"
main()
{
vector<
A*>
vp;
vp.push_back(newA
(1));
vp.push_back(newA
(2));
vp.clear();
Aa(4);
}
/*
1contructor
2contructor
4contructor
4destructor
*/
2)4分
iostream.h>
classApple{
staticintnTotalNumber;
Apple()
{nTotalNumber++;
~Apple(){nTotalNumber--;
staticvoidPrintTotal()
{cout<
nTotalNumber<
intApple:
:
nTotalNumber=0;
intmain(){
Apple*p=newApple[4];
Apple:
PrintTotal();
Applep1,p2;
delete[]p;
4
2
3)4分
public:
inti;
A(intn):
i(n){};
voidPrint(){cout<
i<
"
;
A&
Func(vector<
A>
&
v,A*p)
v.push_back(*p);
for(inti=0;
i<
v.size();
i++)
if(v[i].i==2){
p=&
(v[i]);
break;
}
return*p;
constintSIZE=4;
Aarray[SIZE]={A
(1),A
(2),A(3),A(4)};
v(array,array+SIZE);
A*p=newA(5);
Func(v,p)=10;
v[i].Print();
cout<
p->
i;
1,10,3,4,5,
5
4)4分
A(){}
virtualvoidfunc()
{cout<
A:
func"
~A(){}
virtualvoidfund()
fund"
classB:
publicA{
B(){func();
voidfun(){func();
virtual~B(){fund();
classC:
publicB{
public:
C(){}
voidfunc()
{cout<
C:
~C(){fund();
voidfund()
main()
{
A*pa=newC();
deletepa;
B*pb=newC();
deletepb;
/*
func
fund
*/
5)4分
numeric>
usingstd:
vector;
accumulate;
classComplex{
doublereal;
doubleimage;
Complex(doubler=0,doublei=0):
real(r),image(i){}
friendComplexoperator+(constComplex&
c,inti);
friendostream&
operator<
(ostream&
o,constComplex&
c);
Complexoperator+(constComplex&
c,inti)
Complextmp;
tmp.real=i*i+c.real;
tmp.image=c.image;
returntmp;
ostream&
c)
o<
c.real<
+"
c.image<
i"
;
returno;
inta[]={1,2,3,4};
int>
v(a,a+4);
accumulate(v.begin(),v.end(),Complex(2,3));
32+3i
6)4分
map>
classGt
booloperator()(constint&
n1,constint&
n2)const{
return(n1%10)>
(n2%10);
intmain(){
typedefmap<
int,double,Gt>
mmid;
mmidMyMap;
MyMap.count(15)<
MyMap.insert(mmid:
value_type(15,2.7));
value_type(15,99.3));
value_type(30,111.11));
value_type(11,22.22));
MyMap[16]<
for(mmid:
cons