2-1
关于纯虚函数和抽象类的描述中,(C )是错误的。
A.纯虚函数是一种特殊的虚函数,它没有具体的实现
B.抽象类是指具有纯虚函数的类
C.一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
2-2
下列描述中,( D)是抽象类的特性。
A可以说明虚函数
B可以进行构造函数重载
C.可以定义友元函数
D.不能定义该类对象
2-3
在下面类声明中,关于生成对象不正确的是( )。 class point { public: int x; int y; point(int a,int b) {x=a;y=b;}
};
A.point p(10,2);
B.point *p=new point(1,2);
C.point *p=new point[2];
D.point *p[2]={new point(1,2), new point(3,4)};
2-4
下列运算符中,( )运算符不能重载。
A.&&
B.[ ]
C.::
D.<<
2-5
在下列关键字中,用以说明类中公有成员的是(A )。
A.public
B.private
C.protected
D.friend
2-6
下列叙述中,不正确的是( C)。
A.构造函数必须和类同名
B.构造函数和析构函数都没有返回值
C.析构函数中不能加代码
D.析构函数不能带参数
2-7
在公有继承的情况下,在派生类中能够访问的基类成员包括(C)
A.公有成员
B.保护成员
C.公有成员、保护成员和私有成员
D.公有成员和保护成员
2-8
以下关于异常处理的描述错误的是()。
A.C++程序中出现异常时,编译器不会进行提示
B.将可能产生异常的代码放在try语句块内
C.使用catch关键字接收并处理异常
D.重抛异常可以在try语句块或者catch语句块中调用throw实现
2-9
假设声明了一下的函数模板:
template<class T> T max(T x, T y) { return (x>y)?x:y; }并定义了int i; char c;
错误的调用语句是(C)。
A.max(i,i);
B.max(c,c);
C.max((int)c,i);
D.max(i,c);
2-10
下面是关于ios 类的叙述,正确的是(A )。
A.它是istream 类和ostream 类的虚基类
B.它只是istream 类的虚基类
C.它只是ostream 类的虚基类
D.它是iostrearm 类的虚基类
1-1
多数运算符可以重载,个别运算符不能重载,运算符重载是通过函数定义实现的(T)
1-2
this 指针是一个系统预定义的特殊指针,指向当前正在操作的对象(T)
1-3
在多继承中,派生类的构造函数需要依次调用其基类的构造函数,调用顺序取决于定义派生类时所指定的各基类的顺序。(T)
1-4
虚函数是用virtual 关键字说明的成员函数。(T)
1-5
一个类的友元函数可以访问该类的私有成员。(T)
1-6
静态数据成员不属于某个对象,在给对象分配存储空间时,不包括静态数据成员所占的空间。(T)
1-7
模板函数可以用同名的另一模板函数重载。(T)
2-1
能用友元函数重载的运算符是(A)
A.+
B.=
C.[]
D.->
2-2
如何区分自增运算符重载的前置形式和后置形式?(B)
A.重载时,前置形式的函数名是++operator,后置形式的函数名是operator ++
B.后置形式比前置形式多一个 int 类型的参数
C.无法区分,使用时不管前置形式还是后置形式,都调用相同的重载函数
D.前置形式比后置形式多一个 int 类型的参数
2-1
关于纯虚函数和抽象类的描述中,(C )是错误的。
A.纯虚函数是一种特殊的虚函数,它没有具体的实现
B.抽象类是指具有纯虚函数的类
C.一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
2-2
建立派生类对象时, 3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数),这3种构造函数的调用顺序为(A)
A.abc
B.acb
C.cab
D.cba
2-3下面关于继承和派生的构造函数和析构函数的程序,输出结果是(A)
```C++ #include using namespace std;
class AA { public: AA() { cout << "A"; } ~AA() { cout << "a"; } };
class BB: public AA { AA aa; public: BB() { cout << "B"; } ~BB() { cout << "b"; } };
int main() { BB bb; return 0; }
```
A.AABaab/这里有两个A的原因是一个是基类的,一个 是派生类的
B.AABbaa
C.BAAaab
D.BAAbaa
2-4
在公有派生的前提下,下列说法错误的是(D)。
A.在一个赋值语句中,等号的左边是一个基类对象时,右边可以是一个派生类对象
B.若B是A的派生类,且有默认的构造函数,则语句A &a = new B是正确的
C.在一个返回值为基类指针的函数中,可以返回一个派生类对象的地址
D.在调用一个形参类型为派生类引用的函数时,可以将一个基类对象作为实参
2-5
多继承是指(A)。
A.一个派生类同时继承多个基类
B.多个派生类同时继承一个基类
C.基类本身又是一个更高一级基类的派生类
D.派生类本身又是更低一级派生类的基类
2-6
设有如下代码段:
class A { public: void func1() { cout << "A1" << endl; } virtual void func2() { cout << "A2" << endl; } }; class B : public A { public: void func1() { cout << "B1" << endl; } void func2() { cout << "B2" << endl; } }; int main() { A *a = new B; a->func1(); a->func2(); }则输出结果为:(B)
A.A1 A2
B.A1 B2
C.B1 A2
D.B1 B2
2-7
如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是(C)。
A.virtual show()=0;
B.virtual void show();
C.virtual void show()=0;
D.void show()=0 virtual;
2-8
class X{ int a; public: X(int x=0) {a=x;} }; class Y:public X { int b; public: Y(int x=0,int y=0):X(y)) { b=x;} };
下述语句存在错误的是( D )<div class="pc-text ml-2 pc-color-light inline select-none" data-reactroot=""><div class="pc-text-raw">(2分)</div></div>A.X *pa=new Y(1,2);
B.X a1=Y(1,3);
C.Y b1(2,3); X & a3=b1;
D.X a4(10); Y b2=a4;
2-9
如果多种事物,有一些共同的特点又各自不同的特点,如何编写类来代表这些事物比较合适?(C)
A.为每种事物独立编写一个类,各之间互相无关
B.写一个类代表其中一种事物,代表其他事物的类都从这个类派生出来
C.概括所有事物的共同特点,写一个基类。然后为每种事物写一个类,都从基派生而来
D.一共就写一个类,包含所有事物的所有特点,然后用一个成员变量作为标记,来区分不同种类的事物
2-10
若派生类的成员函数不能直接访问基类中的某个成员,则该成员一定是基类中的(A)。
A.私有成员
B.公有成员
C.保护成员
D.私有成员或保护成员
1-1
函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。(F)
1-2
抽象类是指一些没有说明对象的类。(F)
1-3
预定义的提取符和插入符是可以重载的。(T)
1-4
动态联编调用函数操作是指向对象的指针或对象引用。(T)
1-5
不考虑成员变量对齐问题,对象所占用的存储空间的大小等于各成员变量所占用的存储空间大小之和。(T)
1-6
复制构造函数只有一个参数,类型是同类的引用。(T)
1-7
在构造函数和析构函数中调用虚函数是多态。(F)
1-8
类模板中的成员函数不可以是函数模板。(F)
1-9
"catch(...)"能匹配任何类型的异常。(T)
1-10
string是C++的基本数据类型。(F)
2-1
关于纯虚函数和抽象类的描述中,(C )是错误的。
A.纯虚函数是一种特殊的虚函数,它没有具体的实现
B.抽象类是指具有纯虚函数的类
C.一个基类中说明有纯虚函数,该基类的派生类一定不再是抽象类
D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出
2-2
在下面有关静态成员函数的描述中,正确的是(A)。
A.在建立对象前,就可以为静态数据成员赋值
B.静态成员函数在类外定义时要用static前缀
C.静态成员函数只能在类外定义
D.在静态成员函数中可以使用this指针
2-3
设有基类定义: class Cbase { private: int a; protected: int b; public: int c;
};派生类采用何种继承方式可以使成员变量b成为自己的私有成员( C)
A.保护继承
B.公有继承
C.私有继承
D.私有、保护、公有均可
2-4
关于函数模板,描述错误的是( B)。
A.函数模板的实例化由编译器实现
B.函数模板必须由程序员实例化为可执行的函数模板
C.类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
D.一个类定义中,只要有一个函数模板,这个类就是类模板
2-5
const int *p说明不能修改(B)。
A.p指针;
B.p指针指向的变量;
C.p指针指向的数据类型;
D.上述A、B、C三者;
2-6
下列关于继承的描述中,错误的是( D)。
A.析构函数不能被继承
B.派生类是基类的组合
C.派生类的成员除了它自己的成员外,还包含了它的基类的成员
D.派生类中继承的基类成员的访问权限到派生类保持不变
2-7
设类AA已定义,假设以下语句全部合法,哪些语句会触发调用拷贝构造函数( D)。
``` AA a, b; //1 AA c(10, 20); //2 AA d(c); //3 AA e = d; //4
```
A.2
B.3
C.4
D.3 和 4
2-8
创建一个类A;然后通过继承的方式由类A派生出类B,则下列关于派生中构造函数和析构函数的描述中正确的是:(C)
A.类B继承了类A的构造函数
B.类B继承了类A的析构函数
C.创建类B的对象时,先执行类A的构造函数,然后执行类B的构造函数
D.撤销类B的对象时,先执行类A的析构函数,然后执行类B的析构函数
2-9
以下关于友元的说法哪个是不正确的?(B)
A.一个类的友元函数可以访问类对象的私有成员
B.友元类关系是相互的,即若类A是类B 的友元,类B也是类A的友元
C.在一个类中可以将另一个类的成员函数声明为友元
D.类之间的友元关系不能传递
2-10
如何区分自增运算符重载的前置形式和后置形式?(B)
A.重载时,前置形式的函数名是++operator,后置形式的函数名是operator ++
B.后置形式比前置形式多一个 int 类型的参数
C.无法区分,使用时不管前置形式还是后置形式,都调用相同的重载函数
D.前置形式比后置形式多一个 int 类型的参数
2-11
有如下的类定义:
class Sample { public: Sample( ); Sample(int x ); ...... };动态申请对象存储单元,调用无参构造函数的语句是(C)。
A.Sample *a=new Sample(2);
B.Sample a=new Sample( );
C.Sample *a=new Sample;
D.Sample a=new Sample;
2-12
下列关于异常类的说法中,错误的是。(A)
A.异常类由标准库提供,不可以自定义
B.C++的异常处理机制具有为抛出异常前构造的所有局部对象自动调用析构函数的能力
C.若catch块采用异常类对象接收异常信息,则在抛出异常时将通过拷贝构造函数进行对象复制,异常处理完后才将两个异常对象进行析构,释放资源
D.异常类对象抛出后,catch块会用类对象引用接收它以便执行相应的处理动作
2-13
下面是关于ios 类的叙述,正确的是( A)。
A.它是istream 类和ostream 类的虚基类
B.它只是istream 类的虚基类
C.它只是ostream 类的虚基类
D.它是iostrearm 类的虚基类
2-14
当使用ifstream 流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为( A)。
A.ios::in
B.ios::out
C.ios::in|ios::out
D.ios::binary
2-15
下面小段程序和各项说法中,哪个是正确的(B)
A.char * p = new char[ ]; p[0] = 'K'; delete p;
B.int n = 8; int & r1 = n; const int & r2 = r1;
C.在派生类的各个成员函数中,可以访问基类中的private成员;
D一个类只能包含一个构造函数;
1-1
函数的参数个数和类型都相同,只是返回值不同,这不是重载函数。(T)
1-2
抽象类是指一些没有说明对象的类。(F)
1-3
预定义的提取符和插入符是可以重载的。(T)
1-4
动态联编调用函数操作是指向对象的指针或对象引用。(T)
1-5
不考虑成员变量对齐问题,对象所占用的存储空间的大小等于各成员变量所占用的存储空间大小之和。(T)
1-6
复制构造函数只有一个参数,类型是同类的引用。(T)
1-7
在构造函数和析构函数中调用虚函数是多态。(F)
1-8
类模板中的成员函数不可以是函数模板。(F)
1-9
"catch(...)"能匹配任何类型的异常。(T)
1-10
string是C++的基本数据类型。(F)