C++面向对象试题题型总结.docx

上传人:b****6 文档编号:8907975 上传时间:2023-02-02 格式:DOCX 页数:22 大小:23.98KB
下载 相关 举报
C++面向对象试题题型总结.docx_第1页
第1页 / 共22页
C++面向对象试题题型总结.docx_第2页
第2页 / 共22页
C++面向对象试题题型总结.docx_第3页
第3页 / 共22页
C++面向对象试题题型总结.docx_第4页
第4页 / 共22页
C++面向对象试题题型总结.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

C++面向对象试题题型总结.docx

《C++面向对象试题题型总结.docx》由会员分享,可在线阅读,更多相关《C++面向对象试题题型总结.docx(22页珍藏版)》请在冰豆网上搜索。

C++面向对象试题题型总结.docx

C++面向对象试题题型总结

C++面向对象程序设计

一、单项选择题(共20题,每题1分,共20分)

1、下列关于C++标识符的命名不合法的是C与C#一样

A.PadB.name_1C.A#bcD._a12

2、若有以下类型标识符定义:

()D

intx=2;charw='a';floaty=23.45f;doublez=45.6712;

则表达式w*x+y-z的结果类型是

A.floatB.charC.intD.double

6、对重载函数形参的描述中,错误的是D重载是重点

A.参数的个数可能不同

B.参数的类型可能不同

C.参数的顺序可能不同

D.参数的个数、类型、顺序都相同,只是函数的返回值类型不同

7、以下能正确定义数组并正确赋初值的语句是D

A.intN=5,b[N][N];

B.inta[2]={{1},{3},{4},{5}};

C.intc[2][]={{1,2},{3,4}};

D.intd[3][2]={{1,2},{3,4}};

8、下列给字符数组进行的初始化中,不正确的是D

A.chars1[]="abcd";

B.chars2[3]={'x','y','\0'};

C.chars3[]={'a','x','y','\0'};

D.chars4[6]={"xyz","mnp"};

9、通常的拷贝构造函数的参数是C

A.某个对象名B.某个对象成员名

C.某个对象的引用D.某个对象的指针名

10、关于构造函数特点的描述中,错误的是A

A.定义构造函数必须指出类型(构造函数特点是无返回类型)

B.构造函数的名字与该类的类名相同

C.一个类中可定义0至多个构造函数(不写构造函数,系统会自动生成一个空的构造函数)

D.构造函数是一种成员函数

11、下面程序的运行结果为C

#include

intadd(inta,intb);

voidmain()

{

externintx,y;

cout<

}

intx=20,y=5;

intadd(inta,intb)

{

ints=a+b;

-1-

returns;

}

A.20B.5C.25D.编译会提示出错信息

12、关于常成员的描述中,错误的是B

A.常成员包含常数据成员和常成员函数两种

B.常数据成员必须是公有的

C.常数据成员要使用构造函数成员初始化列表进行初始化

D.常对象只能调用它的常成员函数,不能调用其它的成员函数

13、关于友元函数的描述中,错误的是B

A.友元函数不是成员函数

B.友元函数只能访问类中私有成员

C.友元函数破坏隐藏性,尽量少用

D.友元函数说明在类体内,使用关键字friend

14、如果有intx,*p;floaty,*q;则下面操作正确的是C

A.p=xB.p=q

C.p=&xD.p=&y

16、若数组名作实参而指针变量作形参,函数调用时实参传给形参的是D

A.数组的长度

B.数组第一个元素的值

C.数组所有元素的值

D.数组第一个元素的地址

17、对于动态分配内存空间描述正确的是D

A.使用new运算符分配的内存空间的长度必需是常量

B.delete运算符可以释放动态的存储空间和静态的存储空间

C.由new分配的内存空间是不连续的

D.delete运算符只能释放由new分配的动态存储空间

18、能够释放对象所占资源的是()A

A.析构函数B.数据成员

C.构造函数D.静态成员函数

19、虚函数的定义是在基类中进行的,定义时需要冠以关键字C

A.staticB.frend

C.virtualD.public

20、在C++中串流类是在头文件strstrea.h中定义的,下列不属于串流类的是)C

A.strstreamB.ostrstream

C.ofstreamD.istrstream

二、填空题(共9题16空,每空1分,共16分)

1、函数重载时,编译系统会根据__形参的类型__或__形参的个数__来区分。

与返回类型无关

2、若有chara[80];则cin>>a表示从键盘上读入一个__字符串__到数组a中。

3、若希望用一个已有对象来构造另一个同类型的对象,可以使用__拷贝构造函数__来实现。

4、静态成员(static)属于__类__,而不属于__任何一个对象__,它被同一个类的所有对象共享。

5、类的继承方式有____继承、____继承和____继承。

public(或公有)private(或私有)protected(或保护)

6、重载运算符的含义必须清楚,不能有__二义性__。

7、按照联编进行阶段的不同,联编方法可分为两种:

__动态联编__和__静态联编__。

8、当基类中的某个成员函数被声明为虚函数后,此虚函数就可以在一个或多个派生类中被重新定义,在派生类中重新定义时,其函数原型,包括返回类型、__函数名__、__参数个数__、参数类型以及参数的顺序都必须与基类中的原型完全相同。

9、C++的I/O是以字节流的形式实现的,每个C++编译系统都带有一个面向对象的输入/输出软件包,这就是I/O流类库。

三、判断题(共10题,每题1分,共10分)

1、C++语言支持封装性和继承性,不支持多态性。

×

2、关系运算符可以用来比较两个字符的大小,也可用来比较两个字符串的大小。

)×

3、字符串"sdfgh"的长度是5。

√占用空间好像是6,字符串有个结尾符号占空间。

4、引用和指针都可作函数参数。

5、友元函数说明在类体内,它是一种成员函数。

×说明(定义)在类外,声明在类里面

6、友元类必须被说明为公有成员。

×

7、纯虚函数是在基类中说明的虚函数,它在该基类中没有定义具体的操作内容。

8、析构函数不能被继承。

9、运算符重载以后,其优先级和结合性都不能改变。

10、在C++中,函数名实际上是一个指针,它指向函数的入口。

四、分析程序,回答所提出的问题(16分)

1、#include

classB;

classA

{

public:

A(inti)

{a=i;}

friendintF(A&f1,B&f2);

private:

inta;

};

classB

{

public:

B(inti)

{b=i;}

friendintF(A&f1,B&f2);

private:

intb;

};

intF(A&f1,B&f2)\\可以访问类A,类B里的任何成员

{

return(f1.a+f2.b)*(f1.a-f2.b);

}

voidmain()

{

An1(10);//a=10

第3/7页

Bn2(8);//b=8

cout<

}

①写出程序的运行结果。

36

②该程序中共有几个对象,分别属于哪个类?

为什么在程序的开头处通过语句classB;对类B进行声明?

③程序中的哪两条语句会分别调用A、B的构造函数?

写出这两个构造函数。

④函数F是什么函数?

它的作用是什么?

①36

②n1和n2两个对象,n1属于A类,n2属于B类。

因为B类的定义在A类后,而A类中要引用B类。

③语句An1(10);和语Bn2(8);

A类的构造函数:

A(inti){a=i;}

B类的构造函数:

B(inti){b=i;}

④函数F是友元函数。

它的作用是:

提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间共享数据的机制。

(关键答出共享数据、或答出通过友元可以访问到封装与类A、B中的数据)

二、

五、阅读程序,写出运行结果(共2题,第1题6分,第2题8分,共14分)

1、#include

intfunc(inta)

{

intb=0;

staticintc=4;\\静态变量

b++;c--;

return(a+b+c);

}

voidmain()

{

inta=2;

for(intj=0;j<2;j++)

cout<

}

输出结果为:

66

注意66中间有空格

2、#include

classX

{

public:

X(inti)

{x=i;cout<<”int:

”<

X(doublei)

{x=(int)i*2;cout<<”double:

”<

~X()

{cout<<”~X():

”<

private:

intx;

};

voidmain()

{

inta=8;

doubleb=11.0;

Xx1(55),x2(a*5);

Xx3=X(2*a);

Xx4=X(b);

}

输出结果为:

int:

55,called//X1被创建

int:

40,called//x2被创建

int:

16,called//x3被创建

double:

11,called//x4被创建x值为22,显示的是i值,不改变

~x<>:

22,called//析构函数的调用顺序与构造函数调用顺序相反

~x<>:

16,called

~x<>:

40,called

~x<>:

50,called

六、编写程序(共2题,第1题10分,第2题14分,共24分)

1、输入一组数据以-1作为结束标志,要求删除其它数据只保留能被2整除的数据并输出结果。

#include

voidmain()

{

intb[50],x,n=0;

cin>>x;

while(x!

=-1)

{

b[++n]=x;

cin>>x;

}

for(inti=1,j=0;i<=n;i++)

if(b[i]%2==0)b[++j]=b[i];

for(i=1;i<=j;i++)

cout<

cout<

}

2、定义一个日期类Date,包含年、月、日三个数据成员,以及一个求第二天日期的成员函数和输出日期的成员函数。

#include

classDate

{

private:

intyear,month,day;

public:

Date(inty,intm,intd)

{

year=y;

month=m;

day=d;

}

voidnextday();

voiddisplay()

{

cout<

}

};

voidDate:

:

nextday()

{

int

totaldays[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};

day++;

intleap=(year%400==0||year%4==0&&year%100!

=0);

if(day>totaldays[leap][month-1])

{

day=1;month++;

if(month>12)

{

month=1;year++;

}

}

}

voidmain()

{

intd,m,y;

cout<<"请输入年、月、日:

\n";

cin>>y>>m>>d;

Dated1(y,m,d);

cout<<"今天是:

";d1.display();d1.nextday();

cout<<"明天是:

";d1.display();}

 

填空题(每空1分,共14分)

观看以下程序:

classpoint{

public:

voidshow(){cout<<”point”<

};

voidmain()

{

pointp1;

point*p;

p=&p1;

_______________//通过对象p1访问show函数

______________//通过指针p访问show函数

}

在C++类中可以包含______________、______________和______________三种具有不同访问控制权的成员。

定义类时,在类头中将使用关键字_____________来表示类定义的开始。

如果一个类中至少有一个纯虚函数,则该类称为________________。

C++类的组成包括数据成员和______________,友元_____(是、不是)该类的成员函数。

友员函数是用关键字____________修饰的非成员函数。

若有:

inti;

int&j=i;

i=10;

j=i+1;

则i=__________,j=__________。

8、new的功能是____________________,delete的功能是____________________。

选择题(每小题1.5分,共30分)

1、下列特性中不是面向对象程序设计语言所特有的是()。

(A)数据封装(B)继承(C)多态性(D)模板

2、()是给变量取一个别名,它引入了变量的同意词。

(A)指针(B)引用(C)枚举(D)结构

3、类成员的访问权限中,()只能被本类的成员函数和其友元函数访问。

(A)share(B)public(C)private(D)protected

4、关于构造函数,下列说法不正确的是()。

(A)构造函数名字和类名相同

(B)构造函数在创建对象时自动执行

(C)构造函数无任何函数返回类型

(D)构造函数有且只有一个

7、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是()

(A)面向过程  (B)面向对象  (C)安全性  (D)复用性

8、对于类中定义的成员,其隐含访问权限为()。

A.publicB.protected

C.privateD.static

9、下面有关重载函数的说法中正确的是()

(A)重载函数必须具有不同的返回值类型;  (B)重载函数形参个数必须不同;  

(C)重载函数必须有不同的形参列表  (D)重载函数名可以不同;

10、有如下的对类“CSample”的说明,其中()是错误的。

  classCSample{   

  A.inta=23;

  B.CSample();

    public:

  C.CSample(intval);

  D.~CSample();

11、在inta=3,int*p=&a;中,*p的值是()

A.变量a的地址值B.无意义

C.变量p的地址值D.3

12、每个类()构造函数。

(A)只能有一个(B)只可有公有的

(C)可以有多个(D)只可有缺省的

13、在一个类中可以对一个操作符进行()重载。

(A)1种(B)2种以下(C)3种以下(D)多种

14、在公有继承的情况下,基类非私有成员在派生类中的访问权限()

(A)受限制(B)保持不变(C)受保护(D)不受保护

15、应在下列程序划线处填入的正确语句是()

#include

classBase

{public:

voidfun(){cout<<"Base:

:

fun"<

};

classDerived:

publicBase

{voidfun()

{_____________//显示调用基类的函数fun()

cout<<"Derived:

:

fun"<

}

};

(A)fun();(B)Base.fun();(C)Base:

:

fun();(D)Base->fun();

16、执行下面的程序将输出()

#include

classBASE{

charc;

public:

BASE(charn):

c(n){}

virtual~BASE(){cout<

};

classDERIVED:

publicBASE{

charc;

public:

DERIVED(charn):

BASE(n+1),c(n){}

~DERIVED(){cout<

};

intmain()

{DERIVEDa('X');

return0;

}

(A)XY (B)YX (C)X (D)Y

下面描述中,表达错误的是()

(A)公有继承时基类中的public成员在派生类中仍是public的

(B)公有继承是基类中的private成员在派生类中仍是private的  

(C)公有继承时基类中的protected成员在派生类中仍是protected的  

(D)私有继承时基类中的public成员在派生类中是private的

18、定义析构函数时,应该注意()

(A)其名与类名完全相同(B)返回类型是void类型

(C)无形参,也不可重载(D)函数体中必须有delete语句

19、对于在类中定义的静态数据成员,下面正确的说法是()

A.该类的每个对象中都有一个静态数据成员

B.对象创建时产生

C.在类外进行初始化

D.既可以在类外初始化,也可以在类内初始化

20、C++中声明常量的关键字是()。

A.constB.externC.publicD.enum

改错题(每处2分,共6分)

使用VC6打开考生文件夹下的工程proj1,此工程包含一个源程序文件main.cpp,但该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:

member=0

member=5

menber=10

源程序文件main.cpp清单如下:

#include

class MyClass

{

public:

  MyClass(int i){member=i;}

  void SetMember(int m){member=m;}

  int GetMember()const{return menber;}

  void print()cont{cout<<"member="<

private:

  int member;

};

voed main()

{

  MyClass obj1;//更正_____________________________

  obj1.print();

  MyClass obj2(3);

  obj1.member=5;//更正__________________________

  MyClass.SetMember(10);//更正_______________________

  obj1.print();

  obj2.print();

}

写出下列程序的执行结果(每小题5分,共20分)

#include

classSample

{intn;

public:

Sample(inti){n=i;}

friendintadd(Sample&s1,Sample&s2);

};

intadd(Sample&s1,Sample&s2)

{

returns1.n+s2.n;

}

voidmain()

{

Samples1(10),s2(20);

cout<

}

执行结果是:

 

#include

intadd(intx,inty)

{

returnx+y+1;

}

doubleadd(doublex,doubley)

{

returnx+y-1;

}

voidmain()

{

inta=2,b=4;

doublec=2.6,d=7.4;

cout<

}

执行结果是:

 

3、

#include

classA

{

public:

intn;

};

classB:

virtualpublicA{};

classC:

virtualpublicA{};

classD:

publicB,publicC

{

intgetn(){returnB:

:

n;}

};

voidmain()

{

Dd;

d.B:

:

n=10;

d.C:

:

n=20;

cout<

:

n<<","<

:

n<

}

执行结果是:

4、

#include

classmyclass

{

inta,b;

staticints;

public:

myclass(intx,inty)

{a=x;b=y;s++;}

voidprint()

{cout<

};

intmyclass:

:

s=0;

voidmain()

{

myclassm1(1,2),m2(4,5),m3(6,7);

m1.print();

m2.print();

m3.print();

}

执行结果是:

编程题(每题10分、共30分)

测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。

(10分)

定义一boat与car两个类,二者都有weight属性,定义二者的一个友元函数totalweight(),计算二者的重量和。

(10分)

设计一个汽车类vehicle,包含的数据成员有车轮个数wheels和车重weight。

小车类car是它的派生类,其中包含载人数passenger_load。

每个类都有相关数据的输出方法。

在主程序中定义一个car类对象,对其车轮个数、车重、载人数进行设置并显示。

(10分)

 

填空题(每空1分,共14分)

(1)p1.show();p->show()

(2)公有、私有、保护(3)class(4)抽象类

(5)成员函数、不是(6)friend(7)11、11(8)动态申请内存空间、释放由new申请的空间

 

选择题(每小题1.5分,共30分)

1、D2、B

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1