2021年12月计算机二级C++考前模拟练习(11月18日)
2021年12月计算机二级C++考前模拟练习(11月18日)
1.在下列程序的横线处填上适当的内容,使程序执行后的输出结果为ABCD( )。
#include
usingnamespacestd;
classA
{
public:A(){cout<<’A’;}
};
classB:
{
public:B(){cout<<’B’;}
};
classC:virtualpublicA
{
public:C(){cout<<’C’;}
};
classD:publicB,publicD
{
public:D(){cout<<’D’;}
};
voidmain(){D04;}
A.publicA
B.privateA
C.protectedA
D.virtualpublicA
2.有如下程序:
#include
usingnamespacestd;
classAA{
intn;
public:
AA(intk):n(k){}
intget(){returnn;}
intget()const{returnn+1;}
};
intmain()
{
AAa(5);
constAAb(6);
cout< return0;
}
执行后的输出结果是( )。
A.55
B.57
C.75
D.77
3.有如下程序:
#include
usingnamespacestd;
classDemo
{
public:
Demo(){cout<<"defaultconstructor ";}
Demo(constDemo&x){cont<<"copyconstruc-
tor ";}
};
DemouserCode(Demob){Democ(b);returnC;}
intmain()
{
Demoa;d;
cout<<"callinguserCode() ";
d=userCode(a):
return0;
}
执行上面程序的过程中,构造函数Demo( )和Demo(constDem0&x)被调用的次数分别是( )。
A.1和1
B.1和2
C.2和3
D.2和4
4.有如下程序:
#include
usingnamespacestd;
classDA{
intk;
public:
DA(intx=1):k(x){}
~DA(){cout< };
intmain(){
DAd[]={DA(3),DA(3),DA(3));
DA+p=newDA[2];
delete[]p;
return();
}
这个程序的输出结果是( )。
A.111
B.333
C.11333
D.11133
5.有如下程序:
#include
usingnamespacestd;
classMyClass{
public:
MyClass(intx):val(x){}
voidPrint()const{cout<<"const:val="<< voidPrint(){cout<<"val="< private:
intval;
};
intmain(){
constMyClassobj1(10);
MyClassobj2(20);
obj1.Print();
obj2.Print();
return0;
}
程序的输出结果是( )。
A.va1=10const:va1=20
B.const:va1=10const:va1=20
C.const:va1=10val=20
D.val=10va1=20
参考答案:
1.D。【解析】由主函数main入手,定义了类D对象obi。其中D为类B和C的公有继承,A是C的虚基类。题目中要求的输出结果为ABCD,依次为类A、类B、类C、类D中构造函数的输出语句。为了保证基类通过多条路径被派生类继承,即保证A只被继承一次,输出一个A,所以不但需要声明A为C的虚基类,同样也要声明A为B的虚基类。
2.B。【解析】所谓函数重载,是指同一个函数名可以对应着多个函数的实现,类AA中定义了两个9et()函数,一个为普通成员函数,另一个为常成员函数。一般对象a既可以调用普通成员函数get,也可以调用常成员函数get,但是由于常成员函数不能更新对象的数据成员,所以题中通过对象a调用的函数为普通成员函数get(),返回值为5。常对象b只能调用常成员函数,所以题中通过对象b调用的函数为常成员函数get(),返回值为7。
3.C。【解析】函数Demo()为构造函数,而Demo(constDemo&x)为复制构造函数。C++在创建一个对象时,会自动调用类的构造函数,所以语句"Demoa,d;"将调用函数Demo()2次。当一个对象作为实参传递给函数时为初始化形参,要调用拷贝构造函数;在函数返回一个对象时调用拷贝构造函数。由此可知语句d=userCode(a);调用拷贝构造函数3次。
4.C。【解析】本题考查的是析构函数和对象的生存期。在主函数中,首先定义了一个DA类对象数组d,从初始化列表中可以看出,它包含三个对象;然后通过new运算符动态创建了一个DA类的对象数组,并将首地址赋给DA类指针P;接着通过delete[]运算符销毁指针P所指向的数组,故此时会输出11。最后函数结束,销毁前面定义的对象数组d,会输出333。故最后的输出结果是11333。
5.D。【解析】在建立类对象时,构造函数的执行顺序如下:执行基类的构造函数,调用顺序按照各个基类被继承的声明顺序;执行成员对象的构造函数,调用顺序按照各个成员在类中的声明顺序;执行自身的构造函数。根据以上总结以及题意可知答案选择D选项。
以上就是“2021年12月计算机二级C++考前模拟练习(11月18日)”及其相关内容,想及时获知2021年12月考试时间,大家可通过点击使用环球网校“ 免费预约短信提醒”,即可及时获得时间提醒。环球网校友情提示:为方便小伙伴们更好地备考,环球网校特地为大家准备了计算机二级复习资料,如有需要请点击文章下方“免费下载>>>2021年计算机二级考试真题及备考资料”下载学习。