《C++语言对C语言做了很多改进》由会员分享,可在线阅读,更多相关《C++语言对C语言做了很多改进(31页珍藏版)》请在金锄头文库上搜索。
1、一、选择题(1)C+语言对C语言做了很多改进,C+语言相对于C语言的最根本的变化是A)增加了一些新的运算符B)允许函数重载,并允许设置缺省参数C)规定函数说明符必须用原型D)引进了类和对象的概念(2)对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是 A)公有类型B)私有类型 C)保护类型D)友元类型(3)在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是A)友元函数B)虚函数C)构造函数D)析构函数(4)类的析构函数的作用是A)一般成员函数的初始化B)类的初始化C)对象的初始化D)删除类创建的对象(5)下列说法正确的
2、是A)内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B)内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C)类的内联函数必须在类体内定义D)类的内联函数必须在类体外通过加关键字inline定义(6)下面对静态数据成员的描述中,正确的是 A)静态数据成员可以在类体内进行初始化 B)静态数据成员不可以被类的对象调用 C)静态数据成员不能受private控制符的作用 D)静态数据成员可以直接用类名调用(7)下面对于友元函数描述正确的是 A)友元函数的实现必须在类的内部定义B)友元函数是类的成员函数C)友元函数破坏了类的封装性和隐藏性D)友元函数不能访问类的私有成员(8)在公
3、有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是A)派生类的对象可以赋给基类的对象B)派生类的对象可以初始化基类的引用C)派生类的对象可以直接访问基类中的成员D)派生类的对象的地址可以赋给指向基类的指针(9)下面程序的运行结果为#includeclass Apublic: A()cout1; A()cout2;class B:public Apublic: B()cout3; B()cout4;void main() B b;A)1234B)1324 C)1342D)3142(10)下列关于虚基类的描述,错误的是A)设置虚基类的目的是为了消除二义性B)虚基类的构造函数在非虚基类
4、之后调用C)若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用D)若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数(11)下列关于多态性的描述,错误的是A)C+语言中的多态性分为编译时的多态性和运行时的多态性B)编译时的多态性可通过函数重载实现C)运行时的多态性可通过模板和虚函数实现D)实现运行时多态性的机制称为动态绑定(12)当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为A)ios:inB)ios:out C)ios:in | ios:outD)以上都不对(13)下列程序的运行结果是 #includeclass
5、Aint a;public:A()a=0; A(int aa) a=aa; couta+; ;void main() A x,y (2),z (3); coutendl;A)00B)23C)34D)25(14)对虚函数的调用( )A)一定使用动态联编 B)必须使用动态联编 C)一定使用静态联编 D)不一定使用动态联编(15)下面程序错误的语句是 #include void main() int *p=new int1; p=9; cout *pendl; delete p; A)B)C)D)(16)在C+语言中,数据封装要解决的问题是A)数据的规范化 B)便于数据转换 C)避免数据丢失 D)防
6、止不同模块之间数据的非法访问(17)对类的构造函数和析构函数描述正确的是A)构造函数可以重载,析构函数不能重载 B)构造函数不能重载,析构函数可以重载 C)构造函数可以重载,析构函数也可以重载 D)构造函数不能重载,析构函数也不能重载(18)下面程序的运行结果为#includeclass A int num;public: A(int i)num=i; A(A &a)num=a.num+; void print()coutnum;void main() A a (1),b(a); a.print(); b.print();A)11B)12C)21D)22(19)下面对静态数据成员的描述中,正确
7、的是 A)静态数据成员是类的所有对象共享的数据B)类的每个对象都有自己的静态数据成员C)类的不同对象有不同的静态数据成员值D)静态数据成员不能通过类的对象调用(20)如果类A被说明成类B的友元,则A)类A的成员即类B的成员B)类B的成员即类A的成员C)类A的成员函数不得访问类B的成员D)类B不一定是类A的友元(21)可以在类外用p.a的形式访问派生类对象p的基类成员a,其中a是A)私有继承的公有成员B)公有继承的私有成员C)公有继承的保护成员D)公有继承的公有成员 (22)建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这3种构造函数的
8、调用顺序为A)abcB)acbC)cabD)cba(23)下面关于虚函数的描述,错误的是A)在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数B)基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数C)虚函数可以是另一个类的友元函数,但不能是静态成员函数D)基类中说明的纯虚函数在其任何派生类中都必须实现 (24)下面关于模板的描述,错误的是A)函数模板和类模板的参数可以是任意的数据类型B)类模板不能直接使用,必须先实例化为相应的模板类,然后定义了模板类的对象后才能使用C)函数模板不能直接使用,需要实例化为模板函数后才能使用D)类模板的成员函数都是模板函数(25)语句of
9、stream f(SALARY.DAT,ios:appios:binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,并且A)若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件B)若文件存在,将其置为空文件;若文件不存在,打开失败C)若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D)若文件存在,打开失败;若文件不存在,建立一个新文件(26)下面程序的运行结果是 #include void main() int num=1; int &ref=num; ref=ref+2; cout num; num=num+3; cout refe
10、ndl; A)13B)16C)36D)33(27)下列程序的运行结果为#includeint i=0;class Apublic: A()i+;void main() A a,b3,*c; c=b; coutiendl;A)2B)3C)4D)5(28)下面关于C+语言的描述错误的是A)C+语言支持数据封装B)C+语言中引入友元没有破坏封装性C)C+语言允许函数名和运算符重载D)C+语言支持动态联编(29)一个函数功能不太复杂但要求被频繁调用,应选用A)内联函数B)重载函数C)递归函数D)嵌套函数(30)为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为 A)p
11、ublicB)protectedC)privateD)static(31)在C+语言程序中,对象之间的相互通信通过A)继承实现B)调用成员函数实现C)封装实现D)函数重载实现(32)类的析构函数是在什么时候调用的?A)类创建时B)创建对象时 C)删除对象时D)不自动调用(33)通常拷贝构造函数的参数是A)某个对象名B)某个对象的成员名C)某个对象的引用名D)某个对象的指针名(34)下面程序的运行结果为#includeclass A static int n;public: A()n=1; A(int num)n=num; void print()coutn;int A:n=2;void mai
12、n() A a,b (3); a.print(); b.print();A)11B)13C)23D)33(35)下列不是描述类的成员函数的是A)构造函数B)析构函数C)友元函数D)拷贝构造函数(36)继承机制的作用是A)信息隐藏B)数据封装C)定义新类D)数据抽象(37)C+语言类体系中,不能被派生类继承的有A)转换函数B)构造函数C)虚函数D)静态成员函数(38)下面程序的运行结果是#includeclass baseprotected: int a;public: base()cout0;class base1:virtual basepublic: base1()cout1;class base2:virtual basepublic: base2()cout2;class derived:public base1,public base2public: derived()cout3;int main() derived obj;return 0;A)0123B)3120C)0312D)3012(39)对于类定义 class A public: virtual void func1() void func2() ; class B:public A public: