C++考试题重点.docx

上传人:b****3 文档编号:4926634 上传时间:2023-05-07 格式:DOCX 页数:29 大小:26.37KB
下载 相关 举报
C++考试题重点.docx_第1页
第1页 / 共29页
C++考试题重点.docx_第2页
第2页 / 共29页
C++考试题重点.docx_第3页
第3页 / 共29页
C++考试题重点.docx_第4页
第4页 / 共29页
C++考试题重点.docx_第5页
第5页 / 共29页
C++考试题重点.docx_第6页
第6页 / 共29页
C++考试题重点.docx_第7页
第7页 / 共29页
C++考试题重点.docx_第8页
第8页 / 共29页
C++考试题重点.docx_第9页
第9页 / 共29页
C++考试题重点.docx_第10页
第10页 / 共29页
C++考试题重点.docx_第11页
第11页 / 共29页
C++考试题重点.docx_第12页
第12页 / 共29页
C++考试题重点.docx_第13页
第13页 / 共29页
C++考试题重点.docx_第14页
第14页 / 共29页
C++考试题重点.docx_第15页
第15页 / 共29页
C++考试题重点.docx_第16页
第16页 / 共29页
C++考试题重点.docx_第17页
第17页 / 共29页
C++考试题重点.docx_第18页
第18页 / 共29页
C++考试题重点.docx_第19页
第19页 / 共29页
C++考试题重点.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++考试题重点.docx

《C++考试题重点.docx》由会员分享,可在线阅读,更多相关《C++考试题重点.docx(29页珍藏版)》请在冰点文库上搜索。

C++考试题重点.docx

C++考试题重点

一、概念题

1.类和对象有什么区别和联系?

类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。

类是对某一类对象的抽象,而对象是某一种类的实例。

2.什么是类的实现?

将类所有未编写函数体的成员函数在类体外全部编写出来。

3.this指针的概念是什么?

类中所有的成员函数〔静态成员函数除外〕都隐含了第一个参数,这个隐含的第一个参数就是this指针,在成员函数的实现代码中,所有涉及对类的数据成员的操作都隐含为对this指针所指对象的操作。

4.为什么要引入构造函数和析构函数?

构造函数的作用是为类对象的数据成员赋初值,构造函数在定义类对象时由系统自动调用;在一个对象死亡或者说退出生存期时,系统会自动调用析构函数,因此可以在析构函数定义中,设置语句释放该对象所占用的一些资源。

5.什么时候需要自定义拷贝构造函数?

假设程序员没有定义拷贝构造函数,那么编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?

当有用一个已经存在对象创立一个同类型的新对象的需求时。

当对象含有指针数据成员,并用它初始化同类型的另一个对象时,默认的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的存单元也复制过去。

这样,就可能出现同一存单元释放两次,导致程序运行出错。

6.什么是堆对象?

创立和回收堆对象的方法是什么?

堆区用来存放在程序运行期间,根据需要随时建立的变量〔对象〕,建立在堆区的对象称为堆对象,当堆对象不再使用时,应予以删除,回收所占用的动态存。

创立和回收堆对象的方法是使用new和delete运算符。

7.为什么需要静态数据成员?

静态数据成员的定义和初始化方法是什么?

定义静态数据成员是为了同一个类的不同对象之间共享公共数据成员;用关键字static可以把数据成员定义成静态数据成员;在定义的类被使用前,要对其中的静态数据成员进展初始化,初始化时不必添加关键字static。

8.什么是静态成员函数?

静态成员函数和非静态成员函数有什么区别?

用关键字static可以把这成员函数定义成静态成员函数。

⑴静态成员函数只能访问类的静态数据成员,不能访问类的非静态数据成员。

因为静态成员函数是类的成员,不涉及具体的对象,访问静态成员函数常用类名引导。

⑵非静态成员函数可以访问类的静态数据成员,也可以访问非静态数据成员。

因为类的静态成员总是存在的。

⑶静态成员函数和非静态成员函数,最主要的差异是非静态成员函数隐含了第一个参数this指针,静态成员函数不含this指针。

9.构造struct和类class有什么异同?

struct和class都可以定义类,但是缺省访问权限说明时,struct的成员是公有的,而class的成员是私有的。

在C++中,struct可被class代替。

10.比拟类的三种继承方式public、protected、private之间的区别。

⑴采用public公有派生,基类成员的访问权限在派生类中保持不变,即基类所有的公有或保护成员在派生类中仍为公有或保护成员。

public派生最常用,可以在派生类的成员函数中访问基类的非私有成员,可通过派生类的对象直接访问基类的公有成员。

⑵采用private私有派生,基类所有的公有和保护成员在派生类中都成为私有成员,只允许在派生类的成员函数中访问基类的非私有成员。

private派生很少使用。

⑶采用protected保护派生,基类所有的公有和保护成员在派生类中都成为保护成员,只允许在派生类的成员函数和该派生类的派生类的成员函数中访问基类的非私有成员。

11.派生类构造函数和析构函数执行的次序是怎样的?

派生类构造函数的执行次序:

首先,调用基类构造函数,调用顺序按照它们被继承时声明的基类名顺序执行;其次,调用嵌对象构造函数,调用次序为各个对象在派生类声明的顺序;最后,执行派生类构造函数体中的容。

派生类析构函数执行过程与构造函数执行过程相反。

即当派生类对象的生存期完毕时,首先调用派生类的析构函数,然后调用嵌对象的析构函数,再调用基类的析构函数。

12.什么叫虚基类?

有什么作用?

在多重继承中,如果多条继承路径上有一个公共的基类,那么在这些路径的集合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,那么只会保存公共基类的一个拷贝。

引进虚基类的目的是为了解决二义性问题,使得公共基类在它的派生类对象中只产生一个基类子对象。

13.什么是多态性,在C++中是如何实现多态的?

多态是指同样的消息被不同类型的对象接收时导致完全不同的行为,是对类的特定成员函数的再抽象。

C++支持的多态有多种类型,重载(包括函数重载和运算符重载)和虚函数是其中主要的方式。

14.什么是抽象类,其有何作用?

抽象类的派生类是否一定要给出纯虚函数的实现?

含有纯虚函数的类称为抽象类。

抽象类的主要作用是通过它为一个类族建立一个公共的接口,使它们能够更有效地发挥多态特性。

抽象类声明了一组派生类共同操作接口的通用语义,而接口的完整实现,即纯虚函数的函数体,要由派生类自己给出,抽象类只能作为基类被继承使用。

抽象类的派生类不一定要给出纯虚函数的实现,没有给出纯虚函数的实现的派生类仍然还是抽象类。

15.在C++中能否声明虚构造函数,为什么?

能否声明虚析构函数,有什么作用?

在C++中不能声明虚构造函数。

多态是不同的对象对同一消息有不同的行为特性,虚函数作为运行过程中多态的根底,主要是针对对象的,而构造函数是在对象产生之前运行的,因此虚构造函数是没有童义的。

在C++中可以声明虚析构函数。

析构函数的功能是在该类对象消亡之前进展一些必要的清理工作,如果一个类的析构函数是虚函数,那么,由它派生而来的所有子类的析构函数也是虚函数。

析构函数设置为虚函数之后,在使用指针引用时可以动态联编,实现运行时的多态,保证使用基类的指针就能够调用适当的析构函数对不同的对象进展清理工作。

二、填空题

1.拷贝构造函数使用______作为参数初始化创立中的对象。

2.在C++中,对于构造函数和析构函数来说,______是可以重载的,而______是不可以重载的。

3.B类中包含一个A类的成员a,那么生成B类的对象时构造函数的调用顺序为______。

4.类的每一个成员函数〔静态成员函数除外〕都有一个隐含的参数,叫做______。

假设类名为A,那么该参数的类型为______。

5.类的静态成员分为______和______。

6.声明友元的关键字是______。

7.如果类A继承了B,那么类A称为______,类B称为______。

8.派生类对基类的继承有三种方式:

______、______和______。

9.如果只想保存公共基类的一个拷贝,就必须使用关键字________把这个公共基类定义为虚基类。

10.派生类的成员有两种来源,即______和______。

11.要想访问基类的private成员变量,只能通过基类提供的______进展间接访问。

12.重载运算符应仍保持其原有的操作数个数、结合性和______。

13.对于双目运算符,假设重载为类的成员函数,有______个参数;假设重载为友元函数,那么有______个参数。

14.后缀"++"重载为类的成员函数〔设类名为A〕的形式为______,重载为类的友元函数〔设类名为A〕的形式为______。

15.设有一时间类Time,现欲用成员函数方法重载运算符+,实现一个时间与一个整数的相加运算,所得结果为一个新时间,那么成员函数的声明语句为______。

16.C++语言支持的两种多态性分别是编译时的多态性和______的多态性。

17.联编有两种方式,即______和______。

18.抽象类必须至少包含一个______。

21.Windows系统中消息的主要类型有______、______和______。

22.当用户在窗口中按下鼠标左键时,Windows系统就会自动发送______消息给该窗口,如果程序要对此消息作出反响,那么程序中应包含类似______函数。

23.OnDraw()函数有一个指向______类的指针参数,通过该参数可以直接向视图输出。

24.应用程序将任何东西画到设备中之前,必须明确索取一个______。

25.对话框分为______和______两种。

26.对话框的初始化工作一般在______和______中完成。

27.MFC中公用对话框有______、______、______、______和______。

28.视图派生类可以选择______类作其基类,可以实现文本编辑功能。

29.对于文档类,数据成员的初始化工作是在______函数中完成的。

30.如果修改了文档类中的数据,并要求重新显示,要用______或______发出重画消息,引起对OnDraw()的调用。

31.当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到______的开场位置。

32.假定x和y为整型,其值分别为16和5,那么a/y和double(x)/y的值分别为______和______。

33.strlen(“apple〞)的值为______。

34.C++程序运行时的在空间可以分为全局数据区,堆区,栈区和______区。

35.假定a是一个一维指针数组,那么a+i所指对象的地址比a大______字节。

36.如果一个派生类只有一个唯一的基类,那么这样的继承称为______。

37.假定AA是一个类,“AA*abc()const;〞是该类中的一个成员函数的原型,在该函数体中______向*this或其成员赋值。

38.假定用户没有给一个名为AB的类定义构造函数,那么系统为其定义的构造函数为______。

39.假定用户为类AB定义了一个构造函数“AB(intaa){a=aa;}〞,该构造函数实现对数据______的初始化。

40.作为类的成员函数重载地个运算符时,参数表中只有一个参数,说明该运算符有______个操作数。

41.C++有两种联编方式,其中在程序编译时的联编叫做______联编

42.虚函数可以是另一类的______函数

43.定义虚函数需要用______关键字

44.将函数“voidvf()〞定义为纯虚数的格式是virtualvoidvf()______

45.拥有纯虚函数的类就是______,该类不能产生类的实例

46.派生类没有重载基类的纯虚函数,那么此派生类也是______

47.有如下程序

#include

classCSAI_A

{

public:

virtualvoidfun(){cout<<"A";}

};

classCSAI_B:

publicCSAI_A

{

public:

virtualvoidfun(){CSAI_A:

:

fun();cout<<"B";}

};

voidmain()

{CSAI_A*p=newCSAI_B;

p->fun();

deletep;

}

执行这个程序的输出结果是〔〕答案:

______

48.有如下程序

#include

constintT=8;

voidmain()

{

inti,s=0;

for(i=1;i<=T;i++){

s+=i*i;

cout<

}

cout<

}

运行结果:

______

49.有如下程序

intff(intx,inty){

intz;

cout<

cin>>z;

if(x+y==z)return1;

elsereturn0;

}

函数功能:

______

50.有如下程序

char*f(char*s){

intn=strlen(s);

char*r=newchar[n+1];

for(inti=0;i

if(s[i]>='a'&&s[i]<='z')r[i]=s[i]-'a'+'A';

elser[i]=s[i];

r[n]='\0';

returnr;

}

函数功能:

______

51.C++虚函数有两种调用方式,分别是______和多态调用方式

52.当运算符重载为成员函数时,对象本身就是______,不在参数表中显示地出现。

53.假设以成员函数形式,为类CSAI重载“double〞运算符,那么该运算符重载函数的原那么是______

54.在表达式“x+=y〞中,“+=〞是作为非成员函数重载的运算符,假设是使用显式的函数调用代替直接使用运算符“+=〞,这个表达式还可以表示为______

55.将运算符“>>〞重载为类CSAI的友元函数的格式是:

friendinstream&operator>>______

56.this指针______破坏类的封装性。

57.通过指向基类的指针调用派生类对象的函数时,采用______调用。

58.下面是对按从小到大排列的有序数组a[n]中进展二分查找x的算法,假设查找成功返回该元素的下标,否那么返回-1。

intBinnarySearch(inta[],intn,intx)

{

intlow=0,high=n-1;//定义并初始化区间下界和上界变量

intmid;//定义保存中点元素下标的变量

while(low<=high){

mid=(low+high)/2;

if(x==a[mid])______

elseif(x

else______

}

return-1;

}

59.请补充完整如下的类定义:

#include

classA{

char*a;

public:

A(){a=0;}//定义无参构造函数,使A的值为空

A(char*aa){

a=______;//进展动态存储分配

strcpy(a,aa);//用aa所指字符串初始化a所指向的动态存储空间

}

______;//定义析构函数,删除a所指向的动态存储空间

};

三、编程题

1.创立一个Employee类,该类中有字符数组表示、街道地址、市、省和邮政编码。

把表示构造函数、ChangeName函数、Display函数的函数原型放在类定义中,构造函数初始化每个成员,Display函数把完整的对象数据打印出来。

其中的数据成员是保护的,函数是公共的。

2.设计并测试类Point,其数据成员是直角坐标系的点坐标。

友元函数distance用来计算两点间的距离。

3.定义一个Rectangle类,有宽width、长length等属性,重载其构造函数Rectangle、Rectangle(intwidth,intlength)。

4.编写一个程序,设计一个Cdate类,它应该满足下面的条件。

⑴用这样的格式输出日期:

日-月-年。

⑵输出在当前日期上加两天后的日期。

⑶设置日期。

5.按照下面函数原型语句编写一个递归函数求出并返回数组a中n个元素的平方和。

intf(inta[],intn)

6.根据下面类中Sum函数成员的原型和注释写出它的类外定义。

classAA{

int*a;

intn;

intMS;

public:

voidInitAA(intaa[],intnn,intms){

if(nn>ms){cout<<"Error!

"<

(1);}

MS=ms;

a=newint[MS];

for(inti=0;i

}

intSum();//求出并返回数组a中前n个元素之和

};

7.定义一个基类有、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。

8.以下Shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()那么是一个通用的用以求不同形状的图形面积总和的函数。

请从Shape类派生三角形类(Triangle)、矩形类〔Rectangle〕,并给出具体的求面积函数。

classShape{

public:

  virtualfloatarea()=0;

};

floattotal(Shape*s[],intn)

{

  floatsum=0.0;

  for(inti=0;i

  sum+=s[i]->area();

  returnsum;

}

9.声明一个Shape类〔形状〕基类,它有两个派生类:

Circle〔圆〕和Square〔正方形〕,要求如下。

⑴根据给出的圆心坐标计算圆的面积。

⑵根据给出的正方形中心坐标和一个顶点坐标计算该正方形的面积。

提示:

Shape类的数据成员包括中心的坐标,Circle类和Square类由Shape类派生,Circle类新增一个数据成员,即圆的半径,Square类新增两个数据成员,即顶点坐标。

明该对话框对象已不存在了。

 

二、填空题

1.引用

2.构造函数析构函数

3.A(),B()

4.this,A*

5.静态数据成员静态成员函数

6.friend

7.派生类基类

8.public、protected、private

9.virtual

10.基类派生类自身

11.成员函数

12.运行时

13.静态联编,动态联编

14.publicvehicle,publicvehicle

15.基类A中的成员函数.

派生类B中的成员函数.

16.C类B类

17.抽象函数

18.优先级2.12

19.Aoperator++(int)friendAoperator++(A&,int)

20.TimeTime:

:

operator+(int)

21.输入消息、控制消息、系统消息、用户消息

22.WM_LBOTTONDOWNOnLButtonDown

23.CDC

24.设备环境

25.模态对话框非模态对话框

26.构造函数OnInitDialog()函数

27.CColorDialog、CFileDialog、CFindReplaceDialog、CFontDialog、CPrintDialog

28.CeditView

29.OnNewDocument()

30.Invalidate()或InvalidateRect()

31.下一行

32.3和3.2

33.5

34.代码

35.4×i

36.单继承

37.不能够

38.AB()

39.a

40.2

41.静态

42.友元

43.virtual

44.=0

45.抽象类

46.抽象类

47.AB

48.1514305591140204

49.输入2个整数相加的结果,结果正确返回1,否那么返回0

50.将字符串中的小写字母转换为大写

51.非多态调用

52.第一操作数

53.operatrodouble()

54.operator+=(x,y)

55.(istream&,CSAI&)

56.不能

57.多态

58.returnmidlow=mid+1

59.newchar[strlen(aa)+1]~A(){delete[]a;}

三、编程题

1.

#include

#include

classEmployee

{

protected:

charname[20];

charaddress[100];

charcity[20];

charprovince[20];

charzipcode[10];

public:

Employee(char*nm,char*addr,char*city,char*prov,char*zip);

voidChangeName(char*newName);

char*Display(char*buffer);

};

Employee:

:

Employee(char*nm,char*adr,char*cit,char*prov,char*zip)

{

strcpy(name,nm);

strcpy(address,adr);

strcpy(city,cit);

strcpy(province,prov);

strcpy(zipcode,zip);

}

voidEmployee:

:

ChangeName(char*newName)

{

strcpy(name,newName);

}

char*Employee:

:

Display(char*buffer)

{

strcpy(buffer,name);

strcat(buffer,address);

returnbuffer;

}

2.

#include

#include

classPoint

{

private:

floatx,y;

public:

Point(floatxx,floatyy)

{x=xx;y=yy;}

floatGetX(){returnx;}

floatGetY(){returny;}

friendfloatdistance(Point&,Point&);

};

floatdistance(Point&a,Point&b)

{

floatdx=a.x-b.x;

floatdy=a.y-b.y;

cout<<"用友元函数distance().显示两点的坐标:

\n";

cout<

returnsqrt(dx*dx+dy*dy);

}

voidmain()

{

floatd;

Pointp1(10.5,20.5),p2(2.5,6.5);

d=distance(p1,p2);

cout<<"两点的距离:

d="<

}

3.

#include

classRectangle

{

public:

Rectangle();

Rectangle(intwidth,intlength);

~Rectangle(){}

intGetWidth()const{returnm_width;}

intGetLength(){returnm_length;}

private:

intm_width;

intm_length;

};

Rectangle:

:

Rectangle()

{

m_width=5;

m_length=10;

}

Rectangl

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2