1、C+面向对象程序设计试题集一、 填空题(每空2分,共20分)1.2.3. 设a、b、c都是int型变量,则a=(b=4)+(c=2)后,a值为_,b值为 。 在派生类的成员中有公有成员、四类成员。 类Sample的构造函数将形参data赋值给数据成员data。请将类定义补充完整。 class Samplepublic: Sample(int data=0);Private: int data;Sample:Sample(int data)4. 面向对象程序设计的5. 继承发生在利用现有类派生新类时,其中现有类称为 ,或父类;派生的新类称为 ,或 。6.7. 若表达式(x+(y-z)*(m/n)
2、+3中的变量均为double型,则表达式值的类型为 。 已知数组a 中的元素个数为n,下列语句的作用是将下标为i 的元素移动到下标为i1 的单元,其中1in。例如,当n=4,a 中原有数据为1,2,3,4 时,则移动后a 中元素为2,3,4,4。请将语句补充完整:for(int i=0;in-1;i+) ai= 。8. 类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的 ,共同行为被描述为类中的 。9. 类Sample的构造函数将形参data赋值给数据成员data。请将类定义补充完整。 class Samplepublic:Sample(int data=0);Private
3、:int data; ;Sample:Sample(int data)10. 实现运行时多态,要使用 函数。11. 设A为test类的对象且赋有初值,则语句test B(A); 。12. 在MyClass 类的定义中,对赋值运算符=进行重载。请将画线处缺失的部分补充完整。MyClass:operator=(const MyClass rhs)if(this=&rhs) return *this;value=rhs. value;return *this; 13. C+语言中的每条基本语句以 _作为结束符,每条复合语句以_ 作为结束符。14. 若p指针指向字符串“ABCDEFGHIJKL”,则语
4、句cout20; i-=2) couti20; i-=2) couti,;运行时循环体的执行次数是46. 类中构造函数有 个,析构函数有 个。47. 有如下类定义:class Samplepublic:Sample();Sample();private:static int date;将静态数据成员data初始化为0的语句是 。48. 假定p所指对象的值为25,p+1所指对象的值为46,则执行“(*p)+;”语句后,p所指对象的值为 。49. 若在类的定义体中只给出了一个成员函数的原型,则在类外给出完整定义时,其函数名前必须加上类名和两个_分隔符。50. 若需要把一个函数“void F( );
5、”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句: 。51. 若要把类外定义的成员函数规定为内联函数,则必须把_关键字放到函数原型或函数头的前面。52. 为了避免在调用成员函数时修改对象中的任何数据成员,则应在定义该成员函数时,在函数头的后面加上_关键字。53. 程序段i=5;j=0;j=+i+j;输出结果为54. 类定义中,既包含数据成员,也包含_成员。55. 假定AB为一个类,则执行“AB a10;”语句时,系统自动调用该类的构造函数的次数为 ,其构造函数名是 。56. 假定一个类对象数组为AN,当离开它的作用域时,系统自动调用该类析构函数的次数为_。57. 已知数组a 中的
6、元素个数为n,下列语句的作用是将下标为i 的元素移动到下标为i1 的单元,其中1in。例如,当n=4,a 中原有数据为1,2,3,4 时,则移动后a中元素为2,3,4,4。请将语句补充完整:for(int i=0;i20; i-=2) couti”Hello wordn” B.cin” Hello wordn”C. cout” Hello wordn” D.ciny);Bif(x=y)&(x!=0) x+=y;Cif(x!=y)cinx;else ciny;Dif(xy) x+;y+;int x=-1;dox=x*x;while(!x);下列说法正确的是( )。A是死循环 B循环执行两次C循环
7、执行一次 D有语法错误下面函数( )的表示方法说明它使用对象的引用作为参数。A. test(pt *p) B.test(pt p) C.test(pt &p) D.test(const P)下面叙述不正确的是( )。A 基类的保护成员在派生类中仍然是保护的B 基类的保护成员在公有派生类中仍然是保护的C 基类的保护成员在私有派生类中是私有的D 对基类成员的访问必须是无两义性下列运算符中,( )运算符在C+中不能重载。A. ?: B. + C. - D.=在C+中,打开一个文件就是将这个文件与一个( )建立关联;关闭一个文件就是取消这种关联。A. 流 B. 类 C. 结构 D. 对象对while、
8、dowhile循环结构,下面说法正确的是( )。A只是表达形式不同Bdowhile结构中的语句至少执行一次Cwhile结构中的语句至少执行一次D条件成立时,它们有可能一次也不执行关于函数的调用下面不正确的是( )。A 由于程序总是从主函数开始,所以函数的调用总是在主函数和其他函数之间进行B 函数的调用可以在任意函数之间进行,只要有需要C 一个函数可以自己调用自己D 函数返回时可以不必带返回值,这时函数在定义时其类型应用void表示 关于函数的声明和定义正确的是( )。A 函数的声明是必须的,只有这样才能保证编译系统对调用表达式和函数之间的参数进行检测,以确保参数的传递正确B 函数的定义和声明可
9、以合二为一,可以只有函数定义即可C 函数在声明时,其参数标识符可省略,但参数的类型、个数与顺序不能省略D 函数的存储类型为外部型,所以可以在其他函数中被调用,它在定义时象其他外部变量一样,可以在其他函数内定义用于类中虚成员函数说明的关键字是( )。A.public B.virtual C. protected D. private有如下程序段:int i=5;while (int i=0) cout*; i-;运行时输出“*”的个数是 ( )A. 0 B.1 C. 5 D. 无穷运算符重载时不需要保持的性质是( )A. 操作数个数 B.操作数类型 C. 优先级 D.结合性有如下类定义和变量定义
10、:class A public:A() data=0; A() int GetData() const return data; void SetData(int n) data=n;private:int data;const A a;A b;下列函数调用中错误的是( )A. a.GetData(); B.a.SetData(10); C.b.GetData(); D. b.SetData(10); 对类的构造函数和析构函数描述正确的是( )A. 构造函数可以重载,析构函数不能重载;B. 构造函数不能重载,析构函数可以重载;C. 构造函数可以重载,析构函数也可以重载;D. 构造函数不能重载,
11、析构函数也不能重载;下列有关类的说法不正确的是( )。A 对象是类的一个实例B 任何一个对象只能属于一个具体的类C 一个类只能有一个对象D 类与对象的关系和数据类型与变量的关系相似( )的功能是对象进行初始化。A析构函数 B. 数据成员 C.构造函数 D.静态成员函数关于友元的描述中,( )是错误的。A 友元函数是成员函数,它被说明在类体内B 友元函数可直接访问类中的私有成员C 友元函数破坏封装性,使用时尽量少用D 友元类中的所有成员函数都是友元函数为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为( )。A.public B. protected C.pri
12、vate D. static下面对静态数据成员的描述中,正确的是( )。A.静态数据成员是类的所有对象共享的数据B.类的每一个对象都有自己的静态数据成员C.类的不同对象有不同的静态数据成员值D.静态数据成员不能通过类的对象调用下列表达方式正确的是( )。Aclass P B class Ppublic: public:int x=15; int x;void show()coutx; void show()coutx; C class P D. class Pint f; public:; int a;f=25; void Seta (int x) a=x;以下叙述中不正确的是( ):A.一个
13、类的所有对象都有各自的数据成员,它们共享函数成员;B. 在一个类中可以声明另一个类的对象作为它的数据成员;C. 类与对象的关系和数据类型与变量的关系相似;D. 一个对象可以属于多个类。对于一个功能不太复杂,并且要求加快执行速度,选用( )合适A内置函数 B重载函数 C递归调用 D嵌套调用Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是 ( ) Sample a2, *p = new Sample;A.0 B. 1 C. 2 D.3已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则( )A.FA必须定义在FB之前B.FB必须定义在FA之前C.若FA定义在FB之
14、后,则FA的原型必须出现在FB的定义之前D.若FB定义在FA之后,则FB的原型必须出现在FA的定义之前下列有关运算符函数的描述中,错误的是( )A.运算符函数的名称总是以operator为前缀B.运算符函数的参数可以是对象C.运算符函数只能定义为类的成员函数D.在表达式中使用重载的运算符相当于调用运算符重载函数下面描述中,正确的是( )。Avirtual可以用来声明虚函数B含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C既使基类的构造函数没有参数,派生类也必须建立构造函数D静态数据成员可以通过成员初始化列表来初始化下列对基类和派生类关系的描述中,错误的是( )。A.派生类是基类的具体化
15、 B.派生类是基类的子集C.派生类是基类定义的延续 D.基类是派生类的抽象C+语言对C语言做了很多改进,C+语言相对于C语言的最根本的变化是( )。A增加了一些新的运算符 B.允许函数重载,并允许设置缺省参数C规定函数说明符必须用原型 D.引进了类和对象的概念下列表示引用的方法中,( )是正确的。已知:int k=1000;Aint &x=k; Bchar &y; Cint &z=1000; Dfloat &t=&k; 下面对于友元函数描述正确的是( )。A友元函数的实现必须在类的内部定义 B友元函数是类的成员函数C友元函数破坏了类的封装性和隐藏性 D友元函数不能访问类的私有成员 假定AB为一
16、个类,则执行“AB a(4) , b3 , * p2 ;”语句时,自动调用该类构造函数的次数为( )。A.3 B.4 C.6 D.9以下不属于构造函数特征的是( )A. 构造函数名与类名相同 B. 构造函数可以重载C. 构造函数可以设置默认参数 D. 构造函数必须指定函数类型下列定义中,X是一个类, ( )是定义指向对象数组的指针p。AX *p4 BX (*p)4 C( X*) p4 DX *p假定X为一个类,则该类的复制构造函数的声明语句为( )。AMy Class(My Class x) BMy Class&(My Class x)CMy Class(My Class &x) DMy Cl
17、ass(My Class *x)以下正确的说法是( )。A.实参和其对应的形参各占用独立的存储单元。B.实参和其对应的形参共占用一个存储单元。C.只有当实参和与其对应的形参同名时才共占用存储单元。D.形参是虚拟的,不占用存储单元。下列关于多态性的描述,错误的是( )。AC+语言的多态性分为编译时的多态性和运行时的多态性B编译时的多态性可通过函数重载实现C运行时的多态性可通过模板实现D实现运行时多态性的机制称为动态绑定对C+编译器区分重载函数无任何意义的信息是( )A.参数类型 B.参数个数C.返回值类型 D.参数顺序关于new运算符的下列描述中,( )是错误的。A它可以用来动态创建对象和对象数
18、组B使用它创建对象或对象数组,可以使用运算符DELETE删除C使用它创建对象时要调用构造函数D使用它调用对象数组时不 许指 定初始值如果一个类至少有一个纯虚函数,那么就称该类为( )。A抽象类 B派生类 C纯基类 D以上都不对 有如下程序:#include using namespace std;class Apublic:virtual void f() cout1;void g() cout2; ;class B: public Apublic: virtual void f() cout3;void g() cout4; ;void show(A &a) a.f(); a.g();int
19、 main() B b; show(b); return 0; 运行时的输出结果是( )A.12 B.34 C.14 D.32下列虚基类的声明中,正确的是( )A. class virtual B:public A B. virtual class B:public AC. class B:public A virtual D. class B: virtual public A派生类的对象对它的基类成员中( )是可以访问的。A.公有继承的公有成员 B.公有继承的私有成员C.公有继承的保护成员 D.私有继承的公有成员已知数组arr的定义如下:int arr5 = 1,2,3,4,5;下列语句中
20、输出结果不是2的是( )A.cout *arr+1 endl; B.cout *(arr+1)endl;C.cout arr1 endl; D.cout *arr endl;下列运算符中,( )运算符在C+中不能重载。A?: B Cnew D& 有如下程序:#include using namespace std;class Apublic:virtual void f() cout1;void g() cout2;class B: public Apublic: virtual void f() cout3;void g() cout4; ;void show(A &a) a.f(); a.
21、g();int main() B b;show(b);return 0; 运行时的输出结果是( )A12 B34 C14 D32有如下程序段:int i=4; int j=1;int main() int i=8,j=i;coutijendl;运行时的输出结果是( )A44 B41 C88 D81下列情况中,不会调用拷贝构造函数的是( )。A用一个对象去初始化同一类的另一个新对象时B将类的一个对象赋予该类的另一个对象时C函数的形参是类的对象,调用函数进行形参和实参结合时D函数的返回值是类的对象,函数执行返回调用时下面对静态数据成员的描述中,正确的是( )。A静态数据成员是类的所有对象共享的数据
22、B类的每一个对象都有自己的静态数据成员C类的不同对象有不同的静态数据成员值D静态数据成员不能通过类的对象调用下面的函数调用fun(a+b,3,max(n-1)*b)则fun 的实参个数是( )。A3 B4 C5 D6已知函数fun的原型为int fun(int ,int ,int)下列重载函数原型中错误的是( )A.char fun(int,int); B.double fun(int,int,double);C.int fun(int,char *); D.float fun(int,int,int);下面描述中,正确的是( )。Avirtual可以用来声明虚函数B含有纯虚函数的类是不可以用
23、来创建对象的,因为它是虚基类C即使基类的构造函数没有参数,派生类也必须建立构造函数D静态数据成员可以通过成员初始化列表来初始化有如下类定义:class MyBaseint k;public:MyBase(int n=0):k(n)int value()constreturn k;class MyDerived: MyBaseint j;public:MyDerived(int i): j(i)int getK()const return k;int gutj()constreturn j;编译时发现有一处语法错误,对这个错误最佳准确的描述是( )A在类MyDerived 的定义中,基类名MyB
24、ase 前缺少关键字public、protected 或privateB函数getK 试图访问基类的私有成员变量kC类MyDerived 缺少一个无参的构造函数D类MyDerived 的构造的数没有对基数数据成员k 进行初始化关于多继承二义性的描述,( )是错误的。A派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现二义性B派生类和它的基类中出现同名函数时,将可能出现二义性C一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性D解决二义性最常用的方法是作用域运算符对成员进行限定有如下的运算重载函数定义:double operator+(int
25、i, int k)return double(i+k);但定义有错误,对这个错误的最准确的描述是( )。A+只能作为成员函数重载,而这里的+是作为非成员函数重载的B两个int 型参数的和应该是int 型,而这里将+的返回类型声明为doubleC没有将运算符重载函数声明为某个类的友元DC+已经提供了求两个int 型数据之和运算符+,不能再定义同样的运算符关于友元的描述中,( )是错误的。A友元函数是成员函数,它被说明在类体内 B友元函数可直接访问类中的私有成员C友元函数破坏封装性,使用时尽量少用 D友元类中的所有成员函数都是友元函数class Parentspublic: int publicD
26、ata;private: int privateData;class ChildA: public Parents/*类体略*/;class ChildB: private Parents/*类体略*/;ChildA a; ChildB b;下面语句中正确的是:( )A. couta.publicDataendl; B. couta.privateDataendl;C. coutb.publicDataendl; D. coutb.privateDataendl;对C+编译器区分重载函数无任何意义的信息是( )A参数类型 B参数个数C返回值类型 D常成员函数关键字const下面的程序段的运行结
27、果为( )char str = job, *p = str;cout *(p+2) 已知有数组定义char a34;下列表达式中错误的是( )A. a2=”WIN” B. strcpy(a2,”WIN”)C. a23=W D. a01=a01有如下程序:#include using namespace std;class Toypublic:Toy(char* _n) strcpy (name,_n); count+;Toy() count-; char* GetName() return name; static int getCount() return count; private:ch
28、ar name10;static int count; ;int Toy:count=0;int main()Toy t1(“Snoopy”),t2(“Mickey”),t3(“Barbie”);coutt1.getCount()endl;return 0; 运行时的输出结果是( )A.1 B.2 C.3 D.运行时出错将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是( )A不合法的运算符 B一元运算符 C无操作数的运算符 D二元运算符 有如下程序:#include using namespace std;class Toypublic:Toy(char* _n) strcpy (
29、name,_n); count+;Toy() count-; char* GetName() return name; static int getCount() return count; private:char name10;static int count; ;int Toy:count=0;int main()Toy t1(“Snoopy”),t2(“Mickey”),t3(“Barbie”);coutt1.getCount()endl;return 0; 运行时的输出结果是( )A1 B2 C3 D运行时出错有如下两个类定义class AA;class BB AA v1,*v2;
30、BB v3; int *v4; ;其中有一个成员变量的定义是错误的,这个变量是( )Av1 Bv2 Cv3 Dv4有如下类定义:class XXint xdata;public: XX(int n=0) : xdata (n) ;class YY : public XX int ydata;public: YY(int m=0, int n=0) : XX(m), ydata(n) ;YY类的对象包含的数据成员的个数是( )A1 B2 C3 D4字符串常量MyNamen在内存中需要占用( )字节A6 B7 C 8 D 9下列表达方式正确的是( )。Aclass P B class Ppubli
31、c: public:int x=15; int x;void show()coutx; void show()coutx; C class P D. class Pint f; public:; int a;f=25; void Seta (int x) a=x;关于友元的描述中,( )是错误的。A友元函数是成员函数,它被说明在类体内 B友元函数可直接访问类中的私有成员C友元函数破坏封装性,使用时尽量少用 D友元类中的所有成员函数都是友元函数 有如下程序段:int i=4; int j=1;int main() int i=8,j=i;coutijendl;运行时的输出结果是( )A44 B4
32、1 C88 D81已知表达式+a中的“+”是作为成员函数重载的运算符,则与+a等效的运算符函数调用形式为(Aa.operator+(1) Boperator+(a)Coperator+(a,1) Da.operator+()#includeusing namespace std;class Testpublic:Test()Test()cout#;int main()Test temp2, *pTemp2; )return 0;执行这个程序输出星号(#)的个数为( )。A1 B2 C3 D4关于多继承二义性的描述,( )是错误的。A派生类的多个基类中存在同名成员时,派生类对这个成员访问可能出现
33、二义性B一个派生类是从具有共同的间接基类的两个基类派生来的,派生类对该公共基类的访问可能出现二义性C解决二义性最常用的方法是作用域运算符对成员进行限定D派生类和它的基类中出现同名函数时,将可能出现二义性将运算符重载为类成员函数时,其参数表中没有参数,说明该运算是(A不合法的运算符 B一元运算符C无操作数的运算符 D二元运算符有如下程序#include using namespace std;class A public:A(int i):r1(i) void print() coutEr1-;void print() const coutCr1*r1-;private:int r1; ;int
34、 main()A al(2); const A a2(4);al.print();a2.print();return 0;运行时的输出结果是( )A运行时出错 BE2-C16- CC4-C16- DE2-E4-下列有关运算符函数的描述中,错误的是( )A运算符函数的名称总是以operator为前缀B运算符函数的参数可以是对象C运算符函数只能定义为类的成员函数D在表达式中使用重载的运算符相当于调用运算符重载函数下列关于this指针的说法正确的是( )A. this指针存在于每个函数之中B. 在类的非静态函数中this指针指向调用该函数的对象C. this指针是指向虚函数表的指针D. this指针
35、是指向类的函数成员的指针有如下程序段:int i=5;while (int i=0) cout*; i-;运行时输出“*”的个数是 ( )A. 0 B.1 C. 5 D. 无穷下列有关内联函数的叙述中,正确的是( )。 )A内联函数在调用时发生控制转移B内联函数必须通过关键字inline 来定义C内联函数是通过编译器来实现的D内联函数体的最后一条语句必须是return 语句一个类可包含析构函数的个数是( )A0个 B1个 C至少一个 D0个或多个关于虚函数的描述中,正确的是( )。A虚函数是一个static类型的成员函数B虚函数是一个非成员函数C基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数D派生类的虚函数与基类的
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100