《c++选择题-.pdf》由会员分享,可在线阅读,更多相关《c++选择题-.pdf(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1.在语句 cindata;中,cin 是C+的关键字类名对象名函数名2.有如下程序:#include using namespace std;class Complex double re,im;public:Complex(double r,double i):re(r),im(i)double real()const return re;double image()const return im;Complex&operator+=(Complex a)re+=a.re;im+=a.im;return*this;ostream&operator (ostream&s,const Comp
2、lex&z)return s(z.real(),z.image();int main()Complex x(1,-2),y(2,3);cout (x+=y)endl;return 0;执行这个程序的输出结果是(1,-2)(2,3)(3,5)(3,1)3.执行如下的程序段后,输出结果是()。cout.fill(*);cout.width(6);cout.fill(#);cout 123 endl;#123 123#*123 123*4.在进行完任何C+流的操作后,都可以用C+流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是()fail eof bad good 5.在 C
3、+语言中,打开一个文件就是将这个文件与一个()建立关联。结构流类对象6.下面关于 C+流的叙述中,正确的是()。cin 是一个输入流对象可以用 ifstream定义一个输出流对象执行语句序列 char*y=PQMN;couty;将输出字符串 PQMN的地址执行语句序列char x80;cin.getline(x,80);时,若键入Happy new year 则 x 中的字符串是 Happy 7.在说明语句:int*f();中,标识符 f 代表的是().一个用于指向整型数据的指针变量一个用于指向一维数组的行指针一个用于指向函数的指针变量一个返回值为指针型的函数名8.在下列函数原型中,可以作为类
4、AA构造函数的是()。void AA(int);int AA();AA(int)const;AA(int);9.有如下函数模板定义:template T func(T x,T y)return x*x+y*y;在下列对 func 的调用中,错误的是()。func(3,5);func(3.0,5.5);func(3,5.5);func(3,5.5);10.有如下函数模板templateT square(T x)return x*x;其中 T 是函数形参函数实参模板形参模板实参11.在 C+中,用于实现运行时多态性的是()。内联函数重载函数模板函数虚函数12.#include using name
5、space std;class A public:virtual void func1()coutA1;void func2()coutA2;class B:public A public:void func1()coutB1;void func2()coutfunc1();p-func2();return 0;运行此程序,屏幕上将显示输出B1B2 A1A2 B1A2 A1B2 13.要实现运行时的多态性,必须通过()调用虚函数基类指针派生类指针对象名派生类名14.要实现动态联编,派生类中的虚函数()返回的类型可以与虚函数的原型不同参数个数可以与虚函数的原型不同参数类型可以与虚函数的原型不同以
6、上都不对15.要实现动态联编,必须通过()调用虚函数对象指针成员名限定对象名派生类名16.虚函数支持多态调用,一个基类的指针可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数,而非虚函数不支持多态调用。有如下程序:#include using namespace std;class Base public:virtual void f()coutf0+;void g()coutg0+;class Derived:public Base public:void f()coutf+;void g()coutf();p-g();return 0;运行时输出的结
7、果是()。f+g+f0+g+f+g0+f0+g0+17.下面四个选项中,()是用来声明虚函数的。virtual public include using namespace 18.下面描述中,正确的是()。virtual可以用来声明虚函数含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类即使基类的构造函数没有参数,派生类也必须建立构造函数静态数据成员可以通过成员初始化列表来初始化19.下面关于 C+语言的描述错误的是()。C+语言支持数据封装C+语言中引入友元没有破坏封装性C+语言允许函数名和运算符重载C+语言支持动态联编20.有如下程序#include using namespace s
8、td;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;执行这个程序屏幕上将显示输出_。B BA ABBB 21.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是()。派生类的对象可以赋给基类的对象派生类的对象可以初始化基类的引用派生类的对象可以直接访问基类中的成员派生类的对象的地址可以赋给指向基类的指针22.在公有继承的情况下,允许派生类直接访
9、问的基类成员包括?公有成员公有成员和保护成员公有成员保护成员和私有成员保护成员23.在公有继承的情况下,基类成员在派生类中的访问权限()。受限制保持不变受保护不受保护24.在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则()。完全相同完全不同部分相同,部分不同以上都不对25.下面叙述不正确的是()。基类的保护成员在派生类中仍然是保护的成员基类的保护成员在公有派生类中仍然是保护的基类的保护成员在私有派生类中仍然是私有的对基类成员的访问必须是无二义性的26.下面描述中,表达错误的是()公有继承时基类中的public成员在派生类中仍是public的公有继承时基类中的pri
10、vate成员在派生类中仍是private的公有继承时基类中的protected成员在派生类中仍是protected的私有继承时基类中的public成员在派生类中是private的27.运用运算符 delete删除一个动态对象时()。系统首先为该动态对象调用构造函数,再释放其占用的内存系统首先释放该动态对象占用的内存,再为其调用构造函数系统首先为该动态对象调用析构函数,再释放其占用的内存系统首先释放动态对象占用的内存,再为其调用析构函数28.有如下类声明:class MyBASE int k;public:void set(int n)k=n;int get()const return k;cl
11、ass 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 中保护的数据成员和成员函数的个数是()。4 3 2 1 29.有如下类定义:class MyBase int k;public:MyBase(int n=0):k(n)int value()return k;class MyDerived:MyBase int j;public;MyDerived(int i):
12、j(i)int getK()const return k;int getJ()constreturn j;在一个派生类对象结束其生命周期时()。先调用派生类的析构函数后调用基类的析构函数先调用基类的析构函数后调用派生类的析构函数如果基数没有定义析构函数,则只调用派生类的析构函数如果派生类没有定义析构函数,则只调用基类的析构函数30.执行下列语句后的结果为().int x=3,y;int*px=&x;y=*px+;x=3,y=4 x=3,y=3 x=4,y=4 x=3,y 不知48.在用关键字 class 定义的类中,以下叙述正确的是()。在类中,不作特别说明的数据成员均为私有类型在类中,不作特
13、别说明的数据成员均为公有类型类成员的定义必须是成员变量定义在前,成员函数定义在后类的成员定义必须放在类定义体内部31.有如下程序:include class BASE char c;public:BASE(char n):c(n)virtual BASE()cout c;class DERIVED:public BASE char c;public:DERIVED(char n):BASE(n+1),c(n)DERIVED()cout c;int main()DERIVED D(X);return 0;执行上面的程序将输出()。XY YX X Y 32.在以下 new和 delete运算符使用
14、中,错误的是().char*p=new char10;deletep;char*p=new char5;delete p;p=new char10;delete p;char*p=new char;delete p;char*p=new int10;delete p;33.有如下程序:#include using namespace std;class BASE public:BASE()coutBASE;class DERIVED:public BASE public:DERIVED()coutDERIVED;int main()DERIVED x;return 0;执行后的输出结果是()。
15、BASE DERIVED BASEDERIVED DERIVEDBASE 34.有如下程序:#include using namespace std;class A public:A()cout A;class B public:B()cout B;class C:public A B b;public:C()cout C;int main()C obj;return 0;执行后的输出结果是()。CBA BAC ACB ABC 35.有如下程序:#include using namespace std;class A public:A(int i)x=i;void dispa()coutx,;
16、private:int x;class B:public A public:B(int i):A(i+10)x=i;void dispb()dispa();coutxendl;private:int x;int main()B b(2);b.dispb();return 0;运行时输出的结果是10,2 12,10 12,2 2,2 36.用 new运算符创建一维数组的正确形式是().int*p=new a10;float*p=new float10;int*p=new int10=0;int*p=new int5=1,2,3,4,5,6;37.有如下程序:#include using name
17、space std;class A public:A()cout A;A()cout A;class B:public A A*p;public:B()cout B;p=new A();B()cout B;delete p;int main()B obj;return 0;执行这个程序的输出结果是BAAABA ABABAA BAABAA ABA ABA 49.重载运算符的实质是函数调用,如果重载了后置单目运算符“+”,执行 C+,则相当于执行了哪个函数()c.operator+(c,0)c.operator+()operator+()operator+(c,0)38.应在下列程序划线处填入的正
18、确语句是()#include class Base public:void fun()coutBase:funENDL;class Derived:public Base void fun()_/显示调用基类的函数fun()coutDerived:funfun();39.有如下程序#include#include using namespace std;class MyClass public:MyClass()coutA;MyClass(char c)coutc;MyClass()coutB;void main()MyClass p1,*p2;p2=new MyClass(X);delete
19、 p2;执行这个程序幕上将显示输出_。ABX ABXB AXB AXBB40.有如下程序:#include using namespace std;class Point public:static int number;public:Point()number+;Point()number-;int Point:number=0;void main()Point*ptr;Point A,B;Point*ptr_point=new Point3;ptr=ptr_point;Point C;coutPoint:numberendl;deleteptr;运行时输出的结果是3 4 6 7 41.以下
20、程序的运行结果是 _。#include stdio.h main()int a=1,2,3,4,5,6,7,8,9,10,11,12;int*p=a+5,*qNULL;*q=*(p+5);cout*p*q;运行后报错6 6 6 12 5 5 42.有如下程序:#include 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
21、 n=Test:getNum()endl;return 0;执行后的输出结果是()。n=0 n=1 n=2 n=3 43.以下程序段的输出结果是().char*alp=ABC,DEF,GHI;int j;coutalp1;A B D DEF 44.以下程序的输出结果是_。main()int i,x33=9,8,7,6,5,4,3,2,1,*p=&x11;for(i=0;i4;i+=2)coutpi;5 2 5 1 5 3 9 7 45.以下程序的输出结果是().#include void main()char s=123,*p;p=s;cout*p+endl;123 1 3 321 46.以下
22、程序的输出结果是()。#include void main()47.char s=12134211,*p;int v1=0,v2=0,v3=0,v4=0;for(p=s;*p;p+)switch(*p)case 1:v1+;case 3:v3+;case 2:v2+;default:v4+;coutv1,v2,v3,v4endl;4,2,1,1 4,7,5,8 7,3,2,1 8,8,8,8 47.已知数组 A和指针 p 定义为:int A2010,*p;,要使 p 指向 A的首元素,正确的赋值表达式是()。p=&A 或 p=A00 p=A 或 p=&A00 p=&A0 或 p=A00 p=A
23、0 或 p=&A00 50.要使语句p=new double20;能够正常执行,变量p 应定义为()。double p20;double p;double(*p)20;double*p;51.要定义一个具有5 个元素的一维数组,并使其各元素的初值依次是 30,50,-88,0 和 0,则下列定义语句中不正确的是 。int vect=30,50,-88;int vect=30,50,-88,0,0;int vect5=30,50,-88;int vect5=30,50,-88,0,0;52.下面说明不正确的是().char a10=china;char a10,*p=a;p=china char
24、*a;a=china;char a10,*p;p=a=china 53.重载赋值操作符时,应声明为()函数。友元虚成员多态54.在一个类中可以对一个操作符进行()重载。1 种2 种以下3 种以下多种55.在下列函数原型中,可以作为类AA构造函数的是()。void AA(int)int AA()AA(int)const AA(int)56.在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是()。虚函数友元函数构造函数析构函数57.在定义构造数据类型时,不能()。说明变量说明存储类型初始化末尾不写分号58.在表达式 x+y*z中,+是作为成员函数重载的运算
25、符,*是作为非成员函数重载的运算符。则 operator+有()个参数,operator*有()参数。2、2 2、1 1、2 1、1 59.在表达式 x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是()。operator+有两个参数,operator*有两个参数operator+有两个参数,operator*有一个参数operator+有一个参数,operator*有两个参数operator+有一个参数,operator*有一个参数60.在 C+语言中,数据封装要解决的问题是()。数据的规范化便于数据转换避免数据丢失防止不同模块之间数据的非法访问6
26、1.有如下类声明:class Foo int bar;则 Foo 类的成员 bar 是()。公有数据成员公有成员函数私有数据成员私有成员函数62.有如下类声明:class SAMPLE int n;public:SAMPLE(int i=0):n(i)void setValue(int n0);下列关于 getValue 成员函数的实现中,正确的是()。SAMPLE:setValue(int n0)n=n0;void SAMPLE:setValue(int n0)n=n0;void setValue(int n0)n=n0;(int n0)n=n0;63.有如下程序:#include usin
27、g namespace std;class test private:int a;public:test()coutconstructorendl;test(int t):a(t)coutaendl;test(const test&_test)a=_test.a;coutcopy constructorendl;test()coutdestructorendl;int main()test A(3);return 0;运行时的输出结果是()。3 3 destructor copy constructor constructor 64.有关析构函数的说法,不正确的是()。析构函数有且仅有一个析构
28、函数和构造函数一样可以有形参析构函数的功能是在系统释放对象之前作一些内存清理工作析构函数无任何函数类型65.有如下程序:#include using namespace std;class A public:static int a;void init()a=1;A(int a=2)init();a+;int A:a=0;A obj;int main()coutobj.a;return 0;运行时输出的结果是0 1 2 3 66.以下有关静态数据成员函数的叙述不正确的是()。静态成员函数属于整个类对静态成员函数的引用不允许使用对象名在静态成员函数中不能直接引用类的非静态成员使用类名可以直接调用
29、其静态成员函数67.以下关于类和对象叙述正确的是().一个类只能有一个对象一个对象可以属于几个不同的类对象是类的一个具体实例一个类中可以有本类的对象68.有如下程序:#include using namespace std;class Sample friend long fun(Sample s);public:Sample(long a)x=a;private:long x;long fun(Sample s)if(s.x2)return 1;return s.x*fun(Sample(s.x-1);int main()int sum=0;for(int i=0;i6;i+)sum+=fu
30、n(Sample(i);coutsum;return 0;运行时输出的结果是120 16 154 34 69.以下关于 typedef的叙述正确的是()。用 typedef可以定义各种类型名,但不能用来定义变量用 typedef可以增加新类型用 typedef只是将已存在的类型用一个新的名字来代表使用 typedef便于程序的通用70.有如下程序:#include using namespace std;class AA int n;public:AA(int k):n(k)int get()return n;int get()const return n+1;int main()AA a(5
31、);const AA b(6);couta.get()b.get();return 0;执行后的输出结果是()。55 57 75 77 71.以下关键字不能用来声明类的访问权限的是_。public static protected private 72.以下各选项企图说明一种新的类型名,其中正确的是()。typedef v1 int;typedef v2=int;typedef int v3;typedef v4:int;73.已 知 在 一 个 类 体 中 包 含 如 下 函 数 原 型:VOLUME operator-(VOLUME)const;,下列关于这个函数的叙述中,错误的是()。这
32、是运算符-的重载运算符函数这个函数所重载的运算符是一个一元运算符这是一个成员函数这个函数不改变类的任何数据成员的值74.已知 X类,则当程序执行到语句:X array3;时,调用了()次构造函数。0 1 2 3 75.已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,()是正确的。void print()const;const void print();void const print();void print(const);76.一个类的友元函数或友元类能够通过成员操作符访问该类的()。私有成员保护成员公有成员所有成员77.下述静态成员的特性中,()是错误的。静态成员函数
33、不能利用this指针静态数据成员要在类体外进行初始化引用静态数据成员时,要在静态数据成员名前加和作用域运算符静态数据成员不是所有对象所共有的78.下面有关重载函数的说法中正确的是()重载函数必须具有不同的返回值类型;重载函数形参个数必须不同;重载函数必须有不同的形参列表重载函数名可以不同;79.下面说法中,正确的是()一个类只能定义一个构造函数,但可以定义多个析构函数一个类只能定义一个析构函数,但可以定义多个构造函数构造函数与析构函数同名,只要名字前加了一个求反符号()构造函数可以指定返回类型,而析构函数不能指定任何返回类型,即使是 void 类型也不可以80.下面关于运算符重载的描述错误的是
34、()。运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构不是所有的运算符都可以进行重载运算符函数的调用必须使用关键字operator 在 C+语言中不可通过运算符重载创造出新的运算符81.下面关于友元的描述中,错误的是()。友元函数可以访问该类的私有数据成员一个类的友元类中的成员函数都是这个类的友元函数友元可以提高程序的运行效率类与类之间的友元关系可以继承1.设有说明:ofstream outfile;则执行语句:outfile.open(data1.txt);后,文 件:data1.txt是 一 个()。用于输入的文本文件用于输出的文本文件用于输入的二进制文件用
35、于输出的二进制文件2.若执行 fopen 函数时发生错误,则函数的返回值是()。地址值0 1 EOF 3.下面对模板的声明,正确的是()template template template template 4.下列函数模板的定义中,合法的是()。templateT abs(T x)return x0?-x:x;template classT abs(T x)return x0?-x:x;template T abs(T x)return x0?-x:x;template T abs(T x)return x0?-x:x;5.下列关于模板的叙述中,错误的是()。模板声明中的第一个符号总是关键字
36、template 在模板声明中用 括起来的部分是模板的形参表类模板不能有数据成员在一定条件下函数模板的实参可以省略6.下列关于模板的说法正确的是()模板的实参在任何时候都可以省略类模板与模板类所指的是同一概念类模板的参数必须是虚拟类型的类模板中的成员函数全部都是模板函数7.下面 4 个选项中,()是用来声明虚函数的。virtualpublic using false 8.下列程序的运行结果为#include template class FF TT a1,a2,a3;public:FF(TT b1,TT b2,TT b3)a1=b1;a2=b2;a3=b3;TT Sum()return a1+
37、a2+a3;void main()FF x(int(1.1),2,3),y(int(4.2),5,6);coutx.Sum()y.Sum()endl;6.1 15.2 6 156 15.2 6.1 15 9.下列属于动态多态的是()函数重载运算符重载虚函数构造函数重载10.下列哪种说法是正确的()不能声明虚构造函数不能声明虚析构函数不能定义抽象类的对象,但可以定义抽象类的指针或引用纯虚函数定义中不能有函数体11.下列描述中,()是抽象类的特征可以说明虚函数可以进行构造函数重载可以定义友元函数不能说明其对象12.下列关于多态性的描述,错误的是()。C+语言中的多态性分为编译时的多态性和运行时的多
38、态性编译时的多态性可通过函数重载实现运行时的多态性可通过模板和虚函数实现实现运行时多态性的机制称为动态绑定13.下列关于动态联编的描述中,错误的是()。动态联编是以虚函数为基础动态联编是运行时确定所调用的函数代码的动态联编调用函数操作是指向对象的指针或对象引用动态联编是在编译时确定操作函数的14.通过()调用虚函数时,采用动态束定。对象指针对象名成员名限定派生类名15.实现运行时的多态性要使用()。重载函数构造函数析构函数虚函数16.设置虚基类的目的是()。简化程序消除二义性提高运行效率减少目标代码17.如果一个类至少有一个纯虚函数,那么就称该类为()。抽象类虚函数派生类以上都不对22.类 A
39、是类 B的友元,类 B是类 C的友元,则下列正确的是()。B是类 A的友元C是类 A的友元A是类 C的友元上都不对23.关于友元的描述中,()是错误的。友元函数是成员函数,它被说明在类体内友元函数可直接访问类中的私有成员友元函数破坏封装性,使用时尽量少用友元类中的所有成员函数都是友元函数24.关于下列虚函数的描述中,()是正确的。虚函数是一个static存储类的成员函数虚函数是一个非成员函数基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数派生类的虚函数与基类的虚函数应具有不同的类型或个数25.不能说明为虚函数的是()。析构函数构造函数类的成员函数以上都不对26.模板的使用实际上是
40、将类模板实例化成一个()。函数对象类抽象类27.cin和 cout 是 I/O 流库预定义的().类包含文件对象常量28.对于下面的程序ifstream fin(c:test.txt);if(fin)cout ok;else cout,它是一个()。用于输入的友元函数用于输入的成员函数用于输出的友元函数用于输出的成员函数32.对于重载的运算符,它是一个()。用于输入的友元函数用于输入的成员函数用于输出的友元函数用于输出的成员函数33.对于语句 coutxendl;错误的是描述是()。“cout”是一个输出流对象“endl”的作用是输出回车换行“x”是一个变量“”称作提取运算符34.关于静态数据
41、成员,下列说法错误的是()。静态数据必须初始化静态数据的初始化是在构造函数中进行的说明静态数据成员时前面要加static 引用静态数据成员时,要在静态数据成员名前加和作用域运算符35.关于静态成员的描述中,()是错误的。静态成员可分为静态数据成员和静态成员函数静态数据成员定义后必须在类体内进行初始化静态数据成员初始化不使用其构造函数静态数据成员函数中不能直接引用非静态成员36.对于类定义class A public:virtual void func1()void func2();class B:public A public:void func1()cout class B func 1en
42、d1;virtual void func2()cout class B func 2end1;下面正确的叙述是A:func2()和 B:func1()都是虚函数A:func2()和 B:func1()都不是虚函数B:func1()是虚函数,而A:func2()不是虚函数B:func1()不是虚函数,而A:func2()是虚函数37.C+类体系中,能被派生类继承的有()构造函数虚函数友元函数析构函数38.如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制#include using namespace std;class Ba
43、se int a,b;public:Base(int x,int y)a=x;b=y;void show()couta,bendl;class Derived:public Base int c,d;public:Derived(int x,int y,int z,int m):Base(x,y)c=z;d=m;void show()coutc,dshow();Return 0;运行后输出的结果是10,20 30,40 20,30 50,50 39.可以用 p.a 的形式访问派生类对象p 的基类成员a,其中 a是私有继承的公有成员公有继承的私有成员公有继承的保护成员公有继承的公有成员40.继承
44、具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。规律性传递性重复性多样性41.继承机制的作用是().信息隐藏数据封装定义新类数据抽象42.多重继承是()。多个单一继承的叠加导出类有多个直接基类多个导出类有唯一的基类每个导出类最多只有一个直接基类,但它可以有多个间接基类43.C+中的类有两种用法:一种是类的实例化,即生成类的对象,并参与系统的运行;另一种是通过(),派生出新的类。复用继承单继承多继承44.编译时的多态性可以通过使用()获得。虚函数和指针重载函数和析构函数虚函数和对象虚函数和引用45.关于纯虚函数和抽象类的描述中,错误的是()。纯虚函数是一种特殊的虚函数,它没有具体的实现抽象类是指具有纯虚函数的类一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出61.不能说明为虚函数的是()。析构函数构造函数类的成员函数以上都不对62.模板的使用实际上是将类模板实例化成一个()。函数对象类抽象类63.派生类的对象对它的基类成员中()是可以访问的。公有继承的公有成员公有继承的私有成员公有继承的保护成员私有继承的公有成员64.若有以下定义,则释放指针所指内存空间的操作是()。float r=news float10;delete r;delete*r;delete r;delete r;