一、选择题
1)以下关键字不能用来声明类的访问权限的是______。 A)public B)static C)protected D)private 2)在公有继承的情况下,允许派生类直接访问的基类成员包括______。 A)公有成员 B)公有成员和保护成员 C)公有成员保护成员和私有成员 D)保护成员 3)关于运算符重载,下列表述中正确的是______。 A)C++已有的任何运算符都可以重载 B)运算符函数的返回类型不能声明为基本数据类型 C)在类型转换符函数的定义中不需要声明返回类型 D)可以通过运算符重载来创建C++中原来没有的运算符 4)关于关键字class和typename,下列表述中正确的是______。
A)程序中的typename都可以替换为class
B)程序中的class都可以替换为typename
C)在模板形参表中只能用typename来声明参数的类型
D)在模板形参表中只能用class或typename来声明参数的类型
5)有如下程序
#include<iostream>
#include<iomanip>
using namespace std;
class MyClass{
public:
MyClass(){cout<<’A”;}
MyClass(char c ){cout<<c;}
~MyClass(){out<<’B”;}
};
void main(){
MyClass p1,*p2
p2=new MyClass(‘X’);
delete p2;}
执行这个程序幕上将显示输出______。
A)ABX B)ABXB C)AXB D)AXBB
6)有如下程序
#include<iostream>
using namespace std;
class Base{
protected:
Base(){cout<<’A’;}
Base(char c){cout<<c;}
};
class Derived:public Base{
public:
Derived(char c ){cout <<c;}
};
int main(){
Derived d1(‘B’);
return 0;
}
执行这个程序屏幕上将显示输出______。
A)B B)BA C)AB D)BB
7)有如下类定义:
class MyBase{
int k;
public:
MyBase(int n=0):k(n){}
int value(){return k;}
};
class MyDerived: MyBase{
int j;
public;
MyDerived(int i): j(i){}
int getK()const {return k;}
int getJ()const{return j;}
};
编译时发现有一处语法错误,对这个错误最佳准确的描述是
A)函数getK试图访问基类的私有成员变量K
B)在类MyDerived的定义中,基类名MyBase前缺少关键字public、 protected或private
C)类MyDerived缺少一个无参的构造函数
D)类MyDerived的构造的数没有对基数数据成员K进行初始化
8)在一个派生类对象结束其生命周期时
A)先调用派生类的析构函数后调用基类的析构函数
B)先调用基类的析构函数后调用派生类的析构函数
C)如果基数没有定义析构函数,则只调用派生类的析构函数
D)如果派生类没有定义析构函数,则只调用基类的析构函数
9)有如下程序
#include<iostream>
using namespace std;
class A{
public:
virtual void funcl(){cout<< "A1";}
void fune2(){cout<< "A2";}
};
class B: public A{
public:
void func1(){cout<< "B1";}
void func2(){cout<< "B2";}
};
void main(){
B *p=new B;
p->funcl();
p->func2();
}
运行程序,屏幕上将显示输出______。
A)B1B2 B)A1A2 C)B1A2 D)A1B2
10)下列关于C++函数的叙述中,正确的是( )。正庚烷
A)每个函数至少要具有一个参数
B)每个函数都必须返回一个值
C)函数在被调用之前必须先声明
D)函数不能自己调用自己
11)下列关于类和对象的叙述中,错误的是( )。
A)一个类只能有一个对象
B)对象是类的具体实例
C)类是对某一类对象的抽象
D)类和对象的关系是一种数据类型与变量的关系
12)在C++中,用于实现运行时多态性的是( )。
A)内联函数
B)重载函数
C)模板函数
D)虚函数
13)下列关于运算符重载的叙述中,正确的是( )。
A)通过运算符重载,可以定义新的运算符
B)有的运算符只能作为成员函数重载
C)若重载运算符+,则相应的运算符函数名是+
D)重载一个二元运算符时,必须声明两个形参
14)下列关于模板的叙述中,错误的是( )。
A检验检疫)模板声明中的第一个符号总是关键字template
B)在模板声明中用 < 和 > 括起来的部分是模板的形参表
C)类模板不能有数据成员
D)在一定条件下函数模板的实参可以省略
15)有如下类声明:
class Foo { int bar; };则Foo类的成员bar是( )。
桅杆风 A)公有数据成员
B)公有成员函数
C)私有数据成员
D)私有成员函数
16)有如下类声明:
class MyBASE{
int k;
public:
void set(int n){ k=n;}
int get( )const{ return k; }
};
class MyDERIVED: protected MyBASE{
protected:
int j;
public:
void set(int m, int n){ MyBASE::set(m); j=n;}
int get( )const{ return MyBASE::get( )+j; }
};
则类MyDERIVED中保护的数据成员和成员函数的个数是( )。
A)4 B)3 C)2 D)1
17)已知在一个类体中包含如下函数原型: VOLUME operator-(VOLUME)const;,下列关于这个函数的叙述中,错误的是( )。
A)这是运算符-的重载运算符函数
期刊影响因子
B)这个函数所重载的运算符是一个一元运算符
C)这是一个成员函数
D)这个函数不改变类的任何数据成员的值
18)有如下函数模板定义:
template <class T> T func(T x, T y) { return x*x+y*y; }
在下列对func的调用中,错误的是( )。
A)func(3, 5);
B)func(3.0, 5.5);
C)func (3, 5.5);
D)func<int>(3, 5.5);
19)在下列函数原型中,可以作为类AA构造函数的是( )。
A)void AA(int);
B)int AA( );
C)AA(int)const;
D)AA(int);
20)下列关于this指针的叙述中,正确的是( 探索与创新)。
A)任何与类相关的函数都有this指针
B)类的成员函数都有this指针
C)类的友元函数都有this指针
D)类的非静态成员函数才有this指针
21)有如下程序:
#include <iostream>
using namespace std;
class Test {
public:
Test( ) { n+=2; }
~Test( ) { n-=3; }
static int getNum( ) { return n; }
private:
static int n;
};
int Test::n = 1;
int main( )
{
Test* p = new Test;
delete p;
cout << "n=" << Test::getNum( ) << endl;
return 0;
}
执行后的输出结果是( )。
A)n=0 B)n=1 C)n=2 D)n=3
21)有如下程序:
#include <iostream>
using namespace std;
class A {
public:
A( ) { cout << "A"; }
};
ptvclass B { public: B( ) { cout << "B"; } };
class C : public A {
B b;
public:
C( ) { cout << "C"; }
};
int main( ) { C obj; return 0; }
执行后的输出结果是( )。
A)CBA B)BAC C)ACB D)ABC
22)有如下类声明:
class XA{
int x;
public:
XA(int n){ x=n;}
};
class XB: public XA{
int y;
public:
XB(int a,int b);
};
在构造函数XB的下列定义中,正确的是( )。
A)XB::XB(int a,int b): x(a), y(b){ }
B)XB::XB(int a,int b): XA(a), y(b){ }
C)XB::XB(int a,int b): x(a), XB(b){ }
D)XB::XB(int a,int b): XA(a), XB(b){ }
23)有如下程序:
#include <iostream>
using namespace std;
class BASE{
public:
~BASE( ){ cout<<"BASE";}
};
class DERIVED: public BASE {
public:
~DERIVED( ){ cout<<"DERIVED";}
};
int main( ){DERIVED x; return 0 ;}
执行后的输出结果是( )。
A)BASE
B)DERIVED
C)BASEDERIVED
D)DERIVEDBASE
24)在表达式 x+y*z中, + 是作为成员函数重载的运算符,* 是作为非成员函数重载的运算符。下列叙述中正确的是
( )。
A)operator+有两个参数,operator*有两个参数
B)operator+有两个参数,operator*有一个参数
C)operator+有一个参数,operator*有两个参数
D)operator+有一个参数,operator*有一个参数