复习:C++填空题
1.C++的流库预定义了4个流,它们是cin、cout、clog 和___。答案:cerr  [解析]分别是标准输入、输出、标准错误流(缓冲)和标准错误流 (无缓冲标准错误)
2.每个对象都是所属类的一个___。答案:实例
3.在已经定义了整型指针p后,为了得到一个包括10个整数的数组并由p所指向,应使用语句___。答案: int *p=new int[10];
4.函数模板中紧随template之后尖括号内的类型参数都要冠以保留字___。答案:class [解析]类模板template <class T1,class T2,...,class Tn>
5.定义类的动态对象数组时,系统只能够自动调用该类的___构造函数对其进行初始化。答案:无参[解析]使用new创建对象数组,调用无参构造函数。
6.表达式cout<<end1 还可表示为___。答案:‘\n’[解析]endl与字符常量‘\n’等价。
7.在C++中,访问一个指针所指向的对象的成员所用的指向运算符是___。答案:->[解析]指针使用成员方法:“->”指向运算符和“.”成员访问运算符。8.假如一个类的名称为MyClass,使用这个类的一个对象初始
化该类的另一个对象时,可以调用___构造函数来完成此功能。答案:复制或拷贝[解析]复制或拷贝构造函数就是用对象初始化新的对象。
9.对赋值运算符进行重载时,应声明为___函数。
答案:类成员 [解析]运算符重载的方法有友元或者成员函数两种途径,但是赋值运算符只能使用成员函数的方法来实现。
10.如果要把A类成员函数f()且返回值为void声明为类B的友元函数,则应在类B的定义中加入的语句___。答案:friend void A::f();[解析]成员函数作为另一个类的友元函数,格式为:friend 返回类型 类名::函数(形参)。
11.String 类的___方法返回查到的字符串在主串的位置。答案: find[解析]string类对象方法的find,查不到字符串,则返回-1。
12.控制格式输入输出的操作中,函数___是用来设置填充字符。要求给出函数名和参数类型。答案: setfill(char)
13.C++语言支持的两种多态性分别是编译时的多态
性和___的多态性。答案:运行时[解析]多态性包括静态的(编译时)多态性和动态的(运行时)多态性。
14.设函数sum是由函数模板实现的,并且sum(3,6)和sum(4.6,8)都是正确的函数调用,则函数模板具有
___个类型参数。答案: 2
15.执行下列代码string str("HelloC++");
cout<<str.substr(5,3); 程序的输出结果是___。 答案: C++[解析]substr取子字符串,参数1表示要截取子串在字符串中的位置,第2个表示取多少个字符 16.在面向对象的程序设计中,将一组对象的共同特性抽象出来形成___。答案:类[解析]类是相似特征的对象的抽象,对象是类的一个实例。
17.定义类动态对象数组时,元素只能靠自动调用该类的___来进行初始化。答案:无参构造函数[解析]使用new 创建动态对象数组,不能有参数,所以只能调用无参的构造函数,初始化对象。
18.抽象类中至少要有一个___函数。答案:纯虚
19.一个抽象类的派生类可以实例化的必要条件是实
现了所有的___。答案:纯虚函数的定义[解析]抽象类只因有纯虚函数,不能被实例化,所以派生类要实
例化必须对纯虚函数进行定义。
20.静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是___。答案:友元函数[解析]引入友元访问类是方便了,但破坏类访问的安全性。
21.在用C++进行程序设计时,最好用___代替malloc。答案: new[解析](1)给单个对象申请分配内存int *ip; ip=new int;(2)给单个对象申请分配
内存的同时初始化该对象int *ip; ip=new int(68);(3)同时给多个对象申请分配内存int *ip; ip=new int[5];  若申请失败,则返回NULL。因此,可以判断返回值是
否为0来获知系统中是否有足够的空间供用户使用。 22.由const修饰的对象称为___。
答案:常对象[解析]使用const关键字说明的成员函数称为常成员函数:<;返回类型说明符><;成员函数名>(<;参数表>)const;    常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。常对象只能调用它的常成员函数。
23.基类的公有成员在派生类中的访问权限由___决定。答案:访问控制方式或继承方式
24.不同对象可以调用相同名称的函数,但执行完全
不同行为的现象称为___。答案:多态性
[解析]虚函数是实现多态的基础,运行过程中的多
态需要同时满足3个条件:(1)类之间应满足子类型关系。(2)必须要有声明的虚函数。(3)调用虚函数操作
的是指向对象的指针或者对象引用;或者是由成员函
数调用虚函数(如果是在构造函数或析构函数中调用
虚函数,则采用静态联编)。
25.this指针始终指向调用成员函数的___。答案:对
象[解析]this指针是隐藏的指针。
26.预处理命令以___符号开头。答案:#
27.类模板用来表达具有___的模板类对象集。答案:相同处理方法
28.在#include命令中所包含的头文件,可以是系统定义的头文件,也可以是___的头文件。答案:自定义 29.C++语言中如果调用函数时,需要改变实参或者返回多个值,应该采取___方式。答案:传地址或引用 [解析]传地址即指针,在函数中通过指针修改它指向的变量的值时,实参也就变化了。使用引用,直接修改变量的别名即引用的值,该变量也就随着变化。
30.如果要把类B的成员函数void fun()说明为类A 的友元函数,则应在类A中加入语句___。答案:friend void B::fun();
31.在编译指令中,宏定义使用___指令。答案:
#define
32.单目运算符作为类成员函数重载时,形参个数为___个。答案:0[解析]双目运算符使用一个参数。
33.为了在对象生存期结束时释放其指针成员所指向的动态存储空间,通常为该类定义___。答案:析构函数[解析]析构函数用来释放对象所占的空间。
指向类成员函数的指针34.复制构造函数使用___作为形式参数。答案:对象的引用
35.假定用户没有给一个名为AB的类定义构造函数,则系统自动给出的缺省构造函数定义为___。
答案:AB()[解析]构造函数的名称必须同类名一致,为对象分配空间和初始化。构造函数不能指定返回类型,函数体中不允许有返回值。构造函数可以重载,一个类可以定义多个参数个数不同的构造函数。如果一个类没有定义任何构造函数,那么C++就自动建立一个默认的构造函数,没有形参,仅创建对象而不作任何初始化。
36.为了实现运行时的多态性,派生类需重新定义基类中的___。答案:虚函数[解析]实现运行时多态性,需要在基类中声明虚函数或纯虚函数。
37.重载函数在参数类型或参数个数上不同,但___必须相同。答案:函数名
38.下面程序运行的结果是___。#include <iostream.h> void main(){ cout.fill(*); cout.width(5);
cout<<"hello"<<endl; cout.clear();}
答案:hello[解析]设置宽度是5但“hello”已经是5个宽度,所以不需要填充。
39.局部对象和全局对象中,在同一程序中___生存期最长。答案:全局对象
40.用___修饰函数称为虚函数。答案:virtual
41.下列程序段的输出结果是___。
cout.setf(ios::showpos);cout<<509.3<<endl;
答案:+509.3[解析]输入、输出格式ios::showpos 用于输出数据的符号位。
42.定义重载函数,应在___上有所不同。答案:参数类型与参数的个数 43.类是用户定义的类型,具有类类型的变量称作___。答案:对象[解析]对象是类的一个实例。
44.在函数体之前加___关键字可以防止覆盖函数改
变数据成员的值。答案:const
[解析]const修饰的对象称为常对象,修饰的引用称为常引用它们的值不允许修改。
45.在构造函数和析构函数中调用虚函数时采用___。答案:静态联编[解析]在析构或构造函数调用虚函数发生静态多态性。
46.若函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的___语句。答案:声明
47.C++提供的预处理语句有3种,文件包含、条件编译和___。答案:宏定义
48.在C++中有两种参数传递方式:传值和___。
答案:传引用[解析](1)传值调用又分为数据传值调用和地址传值调用。(2)引用调用时形参是实参变量的引用名。引用是给一个已有变量起的别名。
49.在保护派生中,基类权限为public的成员在派生类中___。答案:保护类型[解析]基类是保护或公有的,采用保护继承后,在派生类中都是保护类型。采用公有继承后,基类是保护或公有的权限在派生类中不变。采用私有继承后,基类是保护或公有的权限在派生类中为私有。
50.若要使用string类,需要引入的头文件是___。答案:string.h
51.在函数前面用___保留字修饰时,则表示该函数表为内联函数。答案:inline[解析]内联函数用来提高程序运行速度。在类内部定义的函数也是内联函数。
52.重载的运算符保持其原有的___、优先级和结合性不变。答案:操作数
53.编译时的多态性通过___函数实现。答案:重载 [解析]编译多态性,实现的方法主要通过函数的重载或运算符的重载。
54.预处理语句有三种,分别是宏定义、文件包含和___。答案:条件编译[解析]条件编译#if等。 55.构造函数、析构函数和友元函数中,不是该类成员的是___。答案:友元函数[解析]友元函数不是类成员,但可以访问类中成员。
56.控制格式输入输出的操作中,函数___是设置域宽的。答案:setw(int) [解析]setw(int n):用来设置n输出宽度。
57.派生类的成员一般分为两部分,一部分是___,另一部分是自己定义的新成员。答案:从基类继承的成员[解析]派生类成员一个来自继承基类成员,一个来自本身增加的成员。
58.C++中ostream的直接基类___。答案:ios[解析]istream和ostream的直接基类是ios。
59.执行下列代码  int i=230;  cout <<"i="<<hex
<<i<<endl;  程序的输出结果为___。答案:(P193)i=e6[解析]流类库中使用格式符,输出十六进制数据。
60.使用new为int数组动态分配10个存储空间是___。答案:new int[10];
61.面向对象的四个基本特性是多态性、继承性、封装性和___。答案:抽象性[解析]一组对象的共同特征抽象出类的概念,类是对象的抽象,对象是类的实例。封装即将数据和操作紧密结合,外部通过接口实现访问数据,提供安全性。继承解决了类的扩展性。多态性使得不同对象调用相同的函数名,但调用的是不同的函数,实现不同的功能,解决了接口统一的问题。
62.如果一个派生类只有一个唯一的基类,则这样的继承关系称为___。答案:单继承
63.. 继承的方式有公有继承、私有继承和___。答案:保护继承或protected
64.表达式cout<<hex还可表示为___。答案:
cout<<setiosflags(ios::hex)
65.通过C++语言中的___机制,可以从现存类中构建其子类。答案:继承[解析]派生类是对基类的扩充。
66.___是istream类的对象,用处理标准输入,即键盘输入。答案:cin
67.假设类X的对象x是类Y的成员对象,则“Y Obj”语句执行时,先调用类___的构造函数。答案:X[解析]派生类中构造函数的执行顺序:先基类后派生类。
68.派生的新类同时可以增加或重新定义数据和操作,这称为类的___性。答案:层次性
69.C++中istream的直接基类___。答案:ios
70.对已有的运算符赋予多重含义,使同一运算符能够对不同类型的数据进行操作,称为___。答案:运算符重载[解析]运算符重载,是特殊的函数重载,是对系统已有的部分运算进行的再定义。
71.派生类的主要用途是可以定义其基类中___。答案:不具有的成员[解析]继承的特点,扩充基类,即在派生类中增加基类不具有的成员。
72.含有纯虚函数的类称为___。
答案:抽象类[解析]带有纯虚函数的类称为抽象类。
(1)抽象类只能作为基类使用,其纯虚函数的实现由派生类给出;但派生类仍可不给出纯虚函数的定义,继续作为抽象类存在。
(2)抽象类不能定义对象,一般将该类的构造函数说明为保护的访问控制权限。
(3)可以声明一个抽象类的指针和引用。通过指针和引用,可以指向并访问派生类对象,进而访问派生类的成员,这种访问是具有多态特征的。
73.拷贝初始化构造函数使用___来初始化创建中的对象。答案:对象的引用74.一个const对象只能访问___成员函数。答案:常
75.执行___操作将释放由指针所指向的动态分配的数据空间。答案:delete
76.有int a=1,b=2;则表达式a+++--b的值为___。答案:2[解析]a++是后加,--b是前减。
77.A是一个类,已有语句“A* p; p=new A[10];”。要释放由p指向的动态空间,正确的语句应该是___。答案:delete p;
78.定义___函数时,应在参数个数或参数类型上有所不同。答案:重载[解析]重载函数要求同名函数具有相同的功能,而只能是函数类型、参数个数或参数顺序不同。系统将根据同名函数的这些不同之处来选择其对应的实现。
79.执行下列代码
int a=32;  double c=32;  cout.setf(ios::hex); cout<<"hex:a="<<a<<",c="<<c<<endl;
cout.unsetf(ios::hex);  程序的输出结果为___。 答案: hex:a=20,c=32
[解析]用十六进制只能输出整型数据,而不能将其它类型数据转换成十六进制的数据输出。所以double 类型不变仍然是32(double类型)。
80.在定义成员函数时,函数体之前加上___防止覆盖函数改变数据成员的值。答案:const
[解析]常成员函数格式如下:<;返回类型说明符><;成员函数名>(<;参数表>)const;
(1)const是函数类型的一个组成部分,因此在函数实现部分也要带有const关键字。(2)常成员函数不更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。(3)常对象只能调用它的常成员函数,而不能调用其他成员函数。
81.如果一个引用不是用作函数参数或返回值,则在说明该引用时必须对它进行___。答案:赋予初始值82.如果要把PI声明为值为3.14159类型为双精度实数的符号常量,该声明语句是___。
答案:const double PI(3.14159);或者const double PI=3.14159;
83.C++支持两种多态性:___时的多态性和运行时的多态性。答案:编译
84.将指向对象的引用作为函数的形参,形参是对象的引用,实参是 ___。答案:对象名
85.在用class定义一个类时,数据成员和成员函数的默认访问权限是___。答案:private
86.___多态性通过虚函数来实现的。答案:运行多态性
87.C++中有两种继承:单继承和___。答案:多继承
88.如果通过同一个基类派生一系列的类,则将这些类总称为___。答案:类族[解析]单继承方式派生的众多的类。
89.带有___的类称为抽象类。答案:纯虚函数
90.静态成员定义的关键字为___。答案:static[解析]静态数据成员在每个类对象中并不占有存储空间,静态数据成员的值对每个对象都是一样的,但它的值可以被任何一个对象更新,从而实现了同一类的不同对象之间的数据共享。静态数据成员具有静态生存期,必须对它进行初始化。
91.在删除一个动态对象时,将自动调用该动态对象所属类的___函数。答案:析构
[解析](1)如果一个对象被定义在一个函数体内,当这个函数结束时,该对象的析构函数被自动调用。 (2)若使用new运算符动态创建一个对象,在使用delete运算符释放时,delete将会自动调用析构函数。
92.类的私有成员只能被它的成员函数和___访问。
答案:友元[解析]友元函数可以访问类的所有成员。
93.在派生类中实现基类成员的初始化,需要由派生类的构造函数调用___来完成。答案:初始化列表[解析]定义派生类对象,先执行基类构造函数、后执行本类的构造函数。
94.假定用户为类AB定义了一个构造函数“A (int i=0):x(i){}”,则定义该类的对象,与该语句等价的格式为___。答案:(P76)A(int i=0){x=i;}
[解析]在构造函数中对数据成员的初始化可以采用列表的形式,也可以在函数体内进行赋值操作。 95.在单继承和多继承方式中,面向对象的程序设计应尽量使用___继承。答案:单[解析]多继承是单继承的扩展,且多继承易产生二义性等问题。
96.在C++中,虚函数帮助实现了类的___。答案:多态性[解析]动态多态性是通过基类指针或引用结合虚函数来实现的。
97.设类A有成员函数void f(void);若要定义一个指向类成员函数的指针变量pf来指向f,该指针变量的声明语句是:___。答案: void (A::*pf)(void)=&A::f;[解析]相当于void(A::*pf)(void);和pf=&A::f;。
98.执行下列程序double a=3.1415926,b=3.14;
cout<<setprecision(5)<<a<<",
"<<setprecision(5)<<b<<endl;程序的输出结果是
___。答案:3.1416,3.14
99.在下面的类定义中,私有成员有___。
class Location
{ int X,Y;
protected:
int zeroX,zerxY;
int SetZero(intzeroX, intzeroY);
private:
int length,height;
public:
void init(int initX,int initY);
int GetX();
int GetY();  };
答案:X,Y,length,height
100.在C++中,访问指针所指向的对象的成员使用___运算符。答案:->或.
101.C++支持的两种多态性分别是___多态性和运行多态性。答案:静态或编译
102.C++中语句const char * const p=“hello”;所定义的指针p和它所指的内容都不能被___。答案:修改[解析]同时修饰地址和值,表示地址和值都不变。103.假定AB 为一个类,则语句AB(int i=0);为该类___函数的原型说明。答案:带默认值的构造函数[解析]即建立对象时没有参数时,则采用默认值0。104.在C++中,定义虚函数的关键字是___。答案:virtual[解析]在普通函数前面用virtual修饰的函数,就称为虚函数。
105.采用私有派生方式,基类的public成员在私有派生类中是___成员。答案:私有
106.在面向对象程序设计中,将一组数据和这组数据有关的操作集合组装在一起形成对象,这个过程叫
___。答案:封装
107.对某个运算符的重载,实际上是用关键字___与该运算符组成一个运算符函数。答案: operater[解析]运算符的重载即对运算符赋予更多的含义。使用关键字operator+函数组成的,只是该函数是特殊的函数,函数名是运算符。
108.所有模板都是以___关键字和一个形参表开头的。答案:template[解析]类模板,函数模板都要使用template这一关键字。
109.在C++语言中,访问一个对象的成员所用的成员运算符是___。答案:. [解析]如果是指针可以使用“->”
110.开发一个C++语言程序的步骤通常包括编辑、
___、连接、运行和调试。答案:编译
111.以下程序输出的结果是___。
int a=5,b=4,c=3,d; d=a>b>c; cout<<d;
答案:0[解析]a>b是真,为1,但不大于c=3,所以为假即0
112.在C++四个流对象中,___用于标准屏幕输出。答案: cout[解析]cin是输入,cout是输出,cerr(无缓冲标准错误)和clog(缓冲标准错误)是错误处理。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。