IT面试笔试题全集-C++篇_第1页
IT面试笔试题全集-C++篇_第2页
IT面试笔试题全集-C++篇_第3页
IT面试笔试题全集-C++篇_第4页
IT面试笔试题全集-C++篇_第5页
已阅读5页,还剩265页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IT面试笔试题全集—史上最全_C++篇_Rain系列

南京TQ公司面试题

工、简单描述包和dll异同

答:DLL(动态链接库)是经过编译的代码模块,它和可执行文件共同工作,为应

用程序提供功能。程序包是用于C++Builder应用程序、IDE或是二者同时使用的

特殊DLL。有两种程序包:运行时程序包和设计时程序包。运行时程序包提供程

序执行时的功能,设计时程序包扩展了IDE的功能。

何时使用程序包和DLL

对于大多数C++Builder应用程序,程序包提供了更大的灵活性,也比DLL更容易

创建。然而,在几种情况下,DLL比程序包更适合工程的需要:

■程序代码模块从非C++Builder应用程序调用。

•要扩充Web服务器的功能。

•要创建给第三方开发人员使用的代码模块。

•工程是OLE容器。

2、简述parent和owner的区别

答:Parent属性是指构件的包容器,构件只能在此范围内显示和移动。举例子如

下:

(1)在Fonnl的窗体上,放一个Panell,并将Panel1拉大,

⑵在Panel1上放一Button1:

(3)在Forml上放一Button?»

现在如果移动Panell,则Button1随着Panel1移动,这是因为Button1的Parent是

Panel1»现在将Button2移到Panel1上,再次移动Panel1,Button?并不跟着移动,

这是因为Button?的Parent是Forml。除在窗体设计中,应注意构件的Parent是谁

外,在动态创建构件时,也应指出构件的Parent,如在上例中继续操作:

l)ProcedureTfbrml.Button2click(Sender:Tobjet);

2)Var

3)Button:Tbutton;

4)Begin

5)Button:Tbutton.cerate(self);

6)Button.parent=panell;

7)Button.lleft=0;

8)Button.top=0;

9)Button.caption:=

#8217;OK

#8217;;

10)End;

当按Button2时,将在Panel1上创建一个Button,而如果把第6句改为

Button.parent:=self:按Button2时,将在Forml上创建一个ButtonT<>如果将第6

句删除,按Button2时,什么都不会发生,这是因为创建方法无法知道应在哪里显

示构件。

Owner属性是指构件的所有者,它负责构件的创建和释放。如在上例中,系统默认

窗体上所有构件的所有者是窗体,而窗体的所有者是Application。顺便指出,

create方法应带有表示构件所有者的参数,如在上例中,构件所有者是窗体,即

selfo

Parent属性和Owner属性是运行阶段的属性,只能在运行阶段,通过代码设置。

3、简述delphi是如何封装windows消息机制

答:Delphi的消息处理流程

TApplication.OnMessage只在应用程序的消息队列接收到一个消息时才被触发。

般应用程序接收到的消息是与窗口管理有关的消息(例如WM_PAINT和

WM_SIZE),或由PostMessage()>PostAppMessage()或BroadcastsystemMessage()等

API函数发送出的消息。但是,由于Windows或SendMessage。有可能会绕过消息

队列直接将消息发送给窗口过程。当发生这种情况时,TApplication.OnMessage就

不会被触发。

VCL的消息系统:

VCL定义了消息分发系统,该系统将所有的Windows消息传给相应的对象,由各

对象的消息分发系统进行处理。

VCL对象用于接受消息的方法叫做MainWndProc()«通过MainWndPorc。可以对消

息进行任何的处理。不过,一般情况下很少直接调用MainWndProc。来处理消息,

除非不想让消息通过VCL的消息系统分发。

从MainWndProc。反回后,消息被传递给对象的WndProc()的方法,这就是该对

象的窗体

过程,然后进入VCL的分发机构。分发机构使用Disptch()方法把消息分发给一个

消息句柄。

消息到达该消息的处理句柄(Handler)后,经过该句柄的处理,这个消息处理过

程就结束

了。事件

MainWndProc

WndProc

-Dispatch

-Handle

4、简单介绍一下delphi模式下三层开发

答:RemoteDataModule服务器

数据库

Query组件

DataSetProvider组件

客户端应用程序

DCOM组件

ClientDataSet组件

它不通过DataSetProvider组件来传递数据,而是通过RemoteDataModule服务器

所提供的Interface来进行数据的传递。这样就使得应用程序完全与数据库服务器

没有任何关系,对整个系统的升级与维护都带来极大的好处。

对于集合数据,由于Interface的返回值可以是OLEVarient类型,因此我们可以创

建ClientDataSet来进行集合数据的传递。

5、谈"一谈你对vclframework的理解

答:VCLFramework实现了Windows消息机制的完美封装。Dispatch分发消息分

为两种情形:

1.消息被dispatch在虚拟方发表中找到并调用;

2.如果找不到的话,就调用TObject的defaultHandle虚拟方法,当然也可以改写这

个默认调用方法,因为它声明的时候是Virtual的。

6、简单谈一下你对delphi接口机制的理解

答:

1)不接口的引用计数管理

接口指针总是被初始化为nil

接口指针赋值为对象

接口指针赋值为接口指针

接口引用计数使用规则小结

2)接口对象的编译器实现

接口对象的内存空间

接口跳转表

对象内存空间中接口跳转指针的初始化

3)implements的实现

以接口成员变量实现implements

以对象成员变量实现implements

7、ASP的几大内置对象。

答:内置对象:Session,Server,Response,Request,ObjectContent,Application

8、谈谈你以前所做项目对文件和图片的上传和显示所用的方法。

答:上传控件

9、谈你对ASP的理解。

答:不会,没理解

10、web开发客户端程序和服务器端程序的区别

答:只需要开发服务器端啊,客户端只要有个浏览器就行了

C/C++笔试题

一追雨制作

C/C++:

1.C与CH的异同,优劣;

2.C,C++,VC,BC,TC的区别;

3.C++中y…catch关键字的用法与优点;

4.枚举的用法,以及它与宏的区别;

5.const的用法,以及声明const变量与宏的区别;

const的用法有四种:

区别:const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类

型安全检查,而对后者只能进行字符替换,没有类型

安全检查。而且字符替换可能会带来料想不到的边界效应。

有些集成化工具可以对const常量进行调试,但不能对宏量进行调试。

6.C++中引用与指针的区别;

答:1引用实际上是所引用的对象或变量的别名,而指针是包含所指向对象或变量

的地址的变量。

2引用在定义时必须初始化,而指针在定义时不初始化。

3不可以有努NULL的引用,而可以有指向NULL的指针。

4引用在初始化后不可以改变引用关系,而指针可以随时指向其他对象(非const

指针)。

7.C++中virtual与inline的含义分别是什么?

答:在基类成员函数的声明前加上virtual关键字,意味着将该成员函数声明为虚

函数。

inline与函数的定义体放在一起,使该函数称为内联。inline是一种用于实现的关键

字,而不是用于声明的关键字。

虚函数的特点;如果希望派生类能够重新定义基类的方法,则在基类中将该方法定

义为虚方法,这样可以启用动态联编。

内联函数的特点;使用内联函数的目的是为了提高函数的运行效率。内联函数体的

代码不能过长,因为内联函数省去调用函数

的时间是以代码膨胀为代价的。内联函数不能包含循环语句,因为执行循环语句要

比调用函数的开销大。

一个函数能否即是虚函数又是内联函数?

8.以下关键字的含义与用法:

extern,extern"C",static,explicit,register,#undef,#ifhdef

9.什么是函数重载与覆盖?

为什么C不支持函数重载?

为什么C++能支持函数重载?

10.VC中,编译工具条内的Debug与Release选项是什么含义?

11.编写my_memcpy函数,实现与库函数memcpy类似的功能,不能使用任何库

函数;

void*mymemcpy(void*pvTo,constchar*pvFrom,sizetsize)

(

assert((dest!=NULL)

amp;

amp;(src!=NULL));

byte*psTo=(byte*)pvTo;

byte*psFrom=(byte*)pvFrom;

while(size

>0)

{

*psTo++=*psFrom++;

s

returnpvTo;

}

12.编写my_scpy函数,实现与库函数scpy类似的功能,不能使用任何库函数;

答:char*my_scpy(char*sdest,constchar*ssrc)

assert(sdest!=NULL)

amp;

amp;(ssrc!=NULL))

char*address=sdest;

while((*sdest++=*ssrc-H-)!=NULL)

returnaddress;

13.编写gbk_slen函数,计算含有汉字的字符串的长度,汉字作为一个字符处

理;

已知:汉字编码为双字节,其中首字节

<0,尾字节在0〜63以外;(如果一个字节是-128〜127)

14.函数assert的用法?

答:断言assert是仅在debug版本起作用的宏,用于检查“不应该“发生的情况。程

序员可以把assert看成一个

在任何系统状态下都可以安全使用的无害测试手段。

15.为什么在头文件的最前面都会看到这样的代码:

#ifndef_STDIO_H_

//define_STDIO_H

16.为什么数组名作为参数,会改变数组的内容,而其它类型如int却不会改变变

量的值?

答:当数组名作为参数时,传递的实际上是地址。而其他类型如int作为参数时,

由于函数参数值实质上是实参的一份拷贝,被调

函数内部对形参的改变并不影响实参的值。

1.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数。

2.写一个函数,将其中的\t都转换成4个空格。

3.Windows程序的入口是哪里?写出Windows消息机制的流程。

4.如何定义和实现一个类的成员函数为回调函数?

5.C++里面是不是所有的动作都是main()引起的?如果不是,请举例。

6.C++里面如何声明constvoidf(void)函数为C程序中的库函数?

7.下列哪两个是等同的

intb;

Aconstint*a=

amp;b;

Bconst*inta=

amp;b;

Cconstint*consta=

amp;b;

Dintconst*consta=

amp;b;

8.内联函数在编译时是否做参数类型检查?

voidg(base

amp;b){

b.play;

j

voidmain(){

sons;

g(s);

return;

)

3、WinMain

while((bRet=GetMessage(

amp;msg,NULL,0,0))!=0)

if(bRet==-1)

//handletheerrorandpossiblyexit

else

TranslateMessage(

amp;msg);

DispatchMessage(

amp;msg);

MSRAInterviewWrittenExam(December2003,Time:2.5Hours)

1写出下列算法的时间复杂度。

⑴冒泡排序;

(2)选择排序;

(3)插入排序;

(4)快速排序;

⑸堆排序;

⑹归并排序;

2写出下列程序在X86上的运行结果。

suetmybitfields

unsignedshorta:4;

unsignedshortb:5;

unsignedshortc:7;

}test

voidmain(void)

inti;

test.a=2;

test.b=3;

test.c=0;

i=*((short*)

amplest);

prints

%d\n

,i);

)

3写出下列程序的运行结果。

unsignedinti=3;

cout

<

<i*-1;

4写出下列程序所有可能的运行结果。

inta;

intb;

intc;

voidF1()

b=a*2;

a=b;

voidF2()

c=a+l;

a=c;

}

main()

{

a=5;

//StartF1,F2inparallel

Fl();F2();

print]

a=%d\n

,a);

)

C++算法面试题

一追雨制作

算法:

1.什么是NPC,NP-Hard?

2.起泡排序的时间复杂度是多少?

说出至少一个比它更快的算法;

排序的极限时间复杂度是多少?

3.有一个链表,如何判断它是一个循环链表?

如果链表是单向的呢?

如果出现循环的点可能在任意位置呢?

如果缓存空间是有限的,比如是一个常数呢?

如果只能使用2个缓存呢?

4.有一个文件,保存了若干个整数,如何以平均的概率随机得到其中的一个整

数?

如果整数的个数是未知的呢?

如果整数是以字符串形式存放,如:(即如何得到随机的一个字符串)

123

<enter>

-456

<enter>

如果只允许便历文件一次呢?

5.用两组数据,都在内存中,对它们排序分别需要1和2分钟;那么使用两个线

程一起排序,大概需要多少时间?

上海贝尔的面试题43分即可进入复试

—追雨制作

一、请填写BOOL,float,指针变量与“零值”比较的if语句。(10

分)

提示:这里“零值”可以是0,0.0,FALSE或者“空指针”。例如int变量n与“零直,比

较的if语句为:

if(n=0)

if(n!=0)

以此类推。

请写出BOOLflag与“零值”比较的if语句:

请写出floatx与“零值''比较的if语句:

请写出char*p与“零值”比较的if语句:

二、以下为WindowsNT下的32位C++程序,请计算sizeof的值(10分)

chars[]="Hello";

char*p=s;

intn=10;

请计算

sizeof(s)=

sizeof(p)=

sizeof(n)=voidFunc(chars[100])

[

请计算

sizeof(s)=

)

void*p=malloc(100);

请计算

sizeof(p)=

、简答题(25分)

1、头文件中的ifndef/define/endif干什么用?

2、#include

<filename.h>和#include"filename.h”有什么区别?

3、const有什么用途?(请至少说明两种)

4、在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”声明?

5、请简述以下两个for循环的优缺点

〃第一个

for(i=0;i

<N;i++)

(

if(condition)

DoSomething();

else

DoOtherthingO;

}〃第二个

if(condition)

(

for(i=0;i

<N;i++)

DoSomething();

i

f

else

(

for(i=0;i

<N;i++)

DoOtherthing();

优点:N次中,每次都要对condition进行判断

缺点:优点:一次判断condition后,对something或Otherthing执行N次

缺点:

四、有关内存的思考题(20分)

voidGetMemory(char*p)

p=(char*)malloc(100);

voidTest(void)

char*s=NULL;

GetMemory(s);

q

#8220;hclloworld

);

printRs);

)

请问运行Test函数会有什么样的结果?

char*GetMemory(void)

(

charp[]=

#8220;helloworld

returnp;

voidTest(void)

char*s=NULL;

s=GetMemory();

printf(s);

}

请问运行Test函数会有什么样的结果?

VoidGetMemory2(char**p,intnum)

*p=(char*)malloc(num);

voidTest(void)

(

char*s=NULL;

GetMemory(

amp;s?100);

scpy(s,

#8220;hello

);

printf(s);

\

J

请问运行Test函数会有什么样的结果?

voidTest(void)

char*s=(char*)malloc(lOO);

scpy(s,"hello");

free(s);

iRs!=NULL)

{

scpy(s,"world");

printf(s);

请问运行Test函数会有什么样的结果?

五、编写scpy函数(10分)

已知scpy函数的原型是

char*scpy(char*sDest,constchar*sSrc);

其中sDest是目的字符串,sSrc是源字符串。

(1)不调用C++/C的字符串库函数,请编写函数scpy

char*scpy(char*sDest,constchar*sSrc){

intn=0;

while(sSrc[n]!=NULL){

n++:

)

*srtDest=newchar[n];

fbr(inti=0;i

vn;i++){

sDest=sSrc[i];

i++;

f

return*sDest;

\

f

(2)scpy能把sSrc的内容复制到sDest,为什么还要char*类型的返回值?

因为该函数的还可以把复制的字符串首地址指针给其他的指针,而且这种需要也是

有用的。

六、编写类Sing的构造函数、析构函数和赋值函数(25分)

已知类Sing的原型为:

classSing

public:

Sing(constchar*s=NULL);//普通构造函数

Sing(constSing

amp;other);//拷贝构造函数

〜Sing(void);//析构函数

Sing

amp;operate=(constSing

amp;other);//赋值函数

private:

char*m_data;//用于保存字符串

};

请编写Sing的上述4个函数。

〃答案一并给出

-、请填写BOOL,float,指针变量与“零值”比较的if语句。(10分)

请写出BOOLflag与“零值”比较的if语句。(3分)

标准答案:

if(flag)

if(!flag)如下写法均属不良风格,不得分。

if(flag==TRUE)

if(flag=1)

if(flag==FALSE)

if(flag==0)

请写出floatx与“零值”比较的if语句。(4分)

标准答案示例:

constfloatEPSINON=0.00001;

if((x>=

EPSINON)

amp;

amp;(x

<=EPSINON)

不可将浮点变量用“=”或“!=”与数字比较,应该设法转化成“>=”或“

<=”此类形式。

如下是错误的写法,不得分。

if(x==0.0)

if(x!=0.0)

请写出char*p与“零值”比较的if语句。(3分)

标准答案:

if(p=NULL)

if(p!=NULL)如下写法均属不良风格,不得分。

if(P==0)

if(p!=0)

if(P)

if(!)

二、以下为WindowsNT下的32位C++程序,请计算sizeof的值(10分)

chars[]="Hello”;

char*p=s;

intn=10;

请计算

sizeof(s)=6(2分)

sizeof(p)=4(2分)

sizeof(n)=4(2分)voidFunc(chars[100])

请计算

sizeoRs)=4(2分)

void*p=malloc(100);

请计算

sizeof(p)=4(2分)

三、简答题(25分)

1、头文件中的ifndef/define/endif干什么用?(5分)

答:防止该头文件被重复引用。

2、#include

〈filename.h>和#include"filename.h”有什么区别?(5分)

答:对于#include

<filcnamc.h>,编译器从标准库路径开始搜索filename.h

对于#include"filename.h”,编译器从用户的工作路径开始搜索filename.h

3、const有什么用途?(请至少说明两种)(5分)

答:(1)可以定义const常量

(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东

西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

4、在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”?(5

分)

答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的

名字与C语言的不同。假设某个函数的原型为:voidfoo(intx,inty);

该函数被C编译器编译后在库中的名字为_fo。,而C++编译器则会产生像

foointint之类的名字。

CH提供了C连接交换指定符号extern—”来解决名字匹配问题。

5、请简述以下两个for循环的优缺点(5分)

for(i=0;i

<N;i++)

if(condition)

DoSomething();

else

DoOtherthing();

}if(condition)

for(i=0;i

<N;i++)

DoSomething();

else

for(i=0;i

<N;i++)

DoOtherthingO;

优点:程序简洁

缺点:多执行了N-1次逻辑判断,并且打断了循环“流水线”作业,使得编译器不能

对循环进行优化处理,降低了效率。优点:循环的效率高

缺点:程序不简洁

四、有关内存的思考题(每小题5分,共20分)

voidGetMemory(char*p)

p=(char*)malloc(100);

voidTest(void)

char*s=NULL;

GetMemory(s);

qrnvrq

#8220;helloworld

);

printf(s);

I

请问运行Test函数会有什么样的结果?

答:程序崩溃。

因为GetMemory并不能传递动态内存,

Test函数中的s一直都是NULL。

#8220;helloworld

);将使程序崩溃。

char*GetMemory(void)

{

charp[]=

#8220;helloworld

returnp;

j

voidTest(void)

/

i

char*s=NULL;

s=GetMemory();

printf(s);

}

请问运行Test函数会有什么样的结果?

答:可能是乱码。

因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其

原现的内容已经被清除,新内容不可知。

voidGetMemory2(char**p,intnum)

{

*p=(char*)malloc(num);

)

voidTest(void)

{

char*s=NULL;

GetMemory(

amp;s,100);

scpy(s,

#8220;hello

);

printf(s);

请问运行Test函数会有什么样的结果?

答:

(1)能够输出hello

(2)内存泄漏

voidTest(void)

char*s=(char*)malloc(lOO);

scpy(s,"hello");

free(s);

if(s!=NULL)

(

scpy(s,"world");

primes);

}

)

请问运行Test函数会有什么样的结果?

答:篡改动态内存区的内容,后果难以预料,非常危险。

因为free(s);之后,s成为野指针,

if(s!=NULL)语句不起作用。

27费波那其数列,1,1,2,3,5……编写程序求第十项。可以用递归,也可以用

其他方法,但要说明你选择的理由。

#include

#include

<cslib>

intPheponatch(int);

intPheponatch2(int);

intmain()

(

prints

The10this%d

,Pheponatch2(20));

system(

pause

);

return0;

)

〃递归算法

intPheponatch(intN)

if(N==1||N=2)

return1;

else

returnPheponatch(N-1)+Pheponatch(N-2);

//非递归算法

intPheponatch2(intN)

intx=1,y=1,temp;

inti=2;

while(ue)

temp=y;

y=x+y;

x=temp;

i++;

if(i==N)

break;

returny;

}

25.完成下列程序

*

**

***

*

#8230;*

#8230;*

#8230;*

#8230;

*

#8230;.*

#8230;.*

#8230;.*

#8230;.*

#8230;.

*

#8230;..*

#8230;..*

#8230;..*

#8230;..*

#8230;..*

#8230;..

*

#8230;

#8230;*

#8230;

#8230;*

#8230;

#8230;*

#8230;

#8230;*

#8230;

#8230;*

#8230;

#8230;*

#8230;

#8230;

*

#8230;

#8230;.*

#8230;

#8230;.*

#8230;

#8230;.*

#8230;

#8230;.*

#8230;

#8230;.*

#8230;

#8230;.*

#8230;

#8230;.*

#8230;

#8230;.

#include

#defineN8

intmain()

inti;

intj;

intk;

II

II

II

>

>

jnoo

(++斗”+!・N>

X:【=斗)2;

6

*

>

>

jnoo

}

(++-l+!-N>

f:0=D噂

!:【=<!-N=!)JQJ

入mi

ifnn

!iJUI

}

()UIBLUJUI

8Nougop#

<qiUE3SOl>

apnpui#

叩叩ui#

:0mnjoj

cout

<

<

\n

}

return0;

#8220;28下列程序运行时会崩溃,请找出错误并改正,并且说明原因。

//voidappend(intN);

//指针没有初始化:

//NewNode->left=NULL;

//NewNode->right=NULL;

#include

#include

<malloc.h>

typedefsuetTNode{

TNode*left;

TNode*right;

intvalue;

}TNode;

TNode*root=NULL;

voidappend(intN);

intmain()

(

append(63);

append(45);

append(32);

append(77);

append(96);

append(21);

append(17);//Again,数字任意给出

return0;

J

voidappend(intN)

TNode*NewNode=(TNode*)maIloc(sizeof(TNode));

NewNode->value=N;

NewNode->left=NULL;

NewNode->right=NULL;

if(root=NULL)

t

root=NewNode;

return;

}

else

(

TNode*temp;

temp=root;

while((N>=temp->value

amp;

amp;temp->left!=NULL)||(N

right!=NULL))

(

while(N>=temp->value

amp;

amp;temp->left!=NULL)

temp=temp->left;

while(N

right!=NULL)

temp=temp->right;

)

if(N>=temp->value)

temp->left=NewNode;

else

temp->right=NewNode;

return;

)

C++面试题集(5)

—追雨制作

62:8086是多少位的系统?在数据总线上是怎么实现的?

<

<IBM»

63.怎样用最快的方法判断链表是否有环?

64.C++中引用和指针有什么不同?指针加上什么限制等于引用?

答:1引用被创建的时候必须被初始化,而指针不是必需的。2引用在创建后就不

能改变引用的关系,而指针在初始化后可以随时指向

其它的变量或对象。3没有NULL引用,引用必须与合法的存储单元关联,而指针

可以是NULL。

65.做的项目,遇到的困难,怎样解决?

69.操作符重载

classCMyObject:pulicCObject

{

Public:

CMyObject();

CMyObject

amp;operator=(constCMyObject

amp;my);

private:

CSingsName;

intnld:

J,

请重载赋值操作符

70.链表

SuetsuctList

(

intvalue;

suctList*pHead;

)

SuetLinkedList*pMyList;

请编写删除链表的头、尾和第n个节点的程序

7L用SocketAPI制作一个聊天程序,通讯协议使用tcp/ip。要求有简单界面即可,

支持多人聊天。

72.如果有过工作经验,请说明在先前公司的工作以及离职原因(如无,请说明毕

业后的个人展望)

***

73对于C++中类(class)与结构(suet)的描述正确的为:

A,类中的成员默认是private的,当是可以声明为public,private和protected,结构中定

义的成员默认的都是public;

B,结构中不允许定义成员函数,当是类中可以定义成员函数;

C,结构实例使用mallocO动态创建,类对象使用new操作符动态分配内存;

D,结构和类对象都必须使用new创建;

E,结构中不可以定义虚函数,当是类中可以定义虚函数.

F,结构不可以存在继承关系,当是类可以存在继承关系.

答:A,D,F

74,两个互相独立的类:ClassA和ClassB,都各自定义了非静态的公有成员函数

PublicFunc()和非静态的私有成员函数PrivateFunc();

现在要在ClassA中增加定义一个成员函数ClassA::AdditionalPunction(ClassA

a,ClassBb);则可以在AdditionalPunction(ClassAx,ClassBy)的实现部分(函数功能体

内部)

出现的合法的表达是最全的是:

A,x.PrivateFunc();x.PublicFunc();y.PrivateFunc();y.PublicFunc();

B,x.PrivateFunc();x.PublicFunc();y.PublicFunc();

C,x.PrivateFunc();y.PrivateFunc();y.PublicFunc();

D,x.PublicFunc();y.PublicFunc();

答:B

75,C++程序下列说法正确的有:

A,对调用的虚函数和模板类都进行迟后编译.

B,基类与子类中函数如果要构成虚函数,除了要求在基类中用virtual声名,而且必须

名字相同且参数类型相同返回类型相同

C,重载的类成员函数都必须要:或者返回类型不同,或者参数数目不同,或者参数序列

的类型不同.

D,静态成员函数和内联函数不能是虚函数,友员函数和构造函数也不能是虚函数,但

是析构函数可以是虚函数.

答:A

***

76,C++中的类与结构的区别?

77,构造函数和析构函数是否可以被重载,为什么?

答:构造函数可以被重载,析构函数不可以被重载。因为构造函数可以有多个且可

以带参数,而析构函数只能有一个,目不能带参数。

78,一个类的构造函数和析构函数什么时候被调用,是否需要手工调用?

答:构造函数在创建类对象的时候被自动调用,析构函数在类对象生命期结束时;

由系统自动调用。

1#include"filename.h”和#include

<filename.h>的区别?

答:#include“filename.h”表明该文件是用户提供的头文件,查找该文件时从当前

文件目录开始;#include

<filename.h>表明这个文件是一个工程或标准头文件,查找过程会检查预定义的目

录。

2头文件的作用是什么?

答:一、通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公

布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声

明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。

二头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文

件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调

试、改错的负担。

3C++函数中值的传递方式有哪儿种?

答:C++函数的三种传递方式为:值传递、指针传递和引用传递。

4内存的分配方式的分配方式有几种?

答:一、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在

程序的整个运行期间都存在。例如全局变量。

二、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,

函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集

中,效率很高,但是分配的内存容量有限。

三、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任

意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存

期由我们决定,使用非常灵活,但问题也最多。

5实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数;

答:双向链表删除一个节点P

template

<classtype>voidlist

::delnode(intp)

intk=l;

listnode

p=first;

while(p->next!=NULL

amp;

amp;k!=p)

p=p->next;

k++;

t=p->next;

cout

<

<

你已经将数据项

#8220;

<

<t->data

<

<

删除

<

<endl;

p->next=p->next->next;

length

deletet;

}

在节点p后插入一个节点:

template

<classtype>boollist

::insert(typet,intp)

listnode

*p;

p=first;

intk=l;

while(p!=NULL

amp;

amp;k

<P)

p=p->next;

k++;

if(p=NULL

amp;

amp;k!=p)

returnfalse;

else

(

listnode

*tp;

tp=newlistnode

tp->data=t;

tp->next=p->next;

p->next=tp;

length++;

returnue;

\

f

\

f

C++面试题集(4)

一追雨制作

52.以下代码有什么问题?[STL易]

typedefvectorIntArray;

IntArrayarray;

array.push_back(1);

array.push_back(2);

array.push_back(2);

array.push_back(3);

〃删除array数组中所有的2

for(IntArray::iteratoritor=array.begin();itor!=array.end();-H-itor)

if(2=*itor)array.erase(itor);

)

53.写一个函数,完成内存之间的拷贝。[考虑问题是否全面]

答:

void*mymemcpy(void*dest,constvoid*src,size_tcount)

char*pdest=static_cast

<char*>(dest);

constchar*psrc=static_cast

<constchar*>(src);

if(pdest>psrc

amp;

amp;pdest

<psrc+cout)能考虑到这种情况就行了

for(size_ti=count-l;i!=-l;

i)

pdest[i]=psrc[i];

else

for(size_ti=0;i

<count;++i)

pdestfi]=psrc[i];

returndest;

intmain(void)

chars[]=

#8220;0123456789

#8243;;

mymemcpy(s+1,s+0,9);

cout

<

<s

<

<endl;

system(

#8220;Pause

);

return0;

54线程与进程的区别

55:请你分别划划OSI的七层网络结构图,和TCP/IP的五层结构图?

56:请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用?TCP

与UDP呢?

IP协议是网络层的协议,它实现了Internet中自动路由的功能,即寻径的功能,

TCP协议是一个传输性的协议它向下屏蔽了IP协议不可靠传输的特性,向上提供

一个可靠的点到点的传输,UDP提供的是一种无连接的服务,主要考虑到很多应用

不需要可靠的连接,但需要快速的传输

57:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?

交换机用在局域网中,交换机通过纪录局域网内各节点机器的MAC地质(物理地

址)就可以实现传递报文,无需看报文中的IP地质。路由器识别不同网络的方法是通

过识别不同网络的网络ID号(IP地址的高端部分)进行的,所以为了保证路由成

功,每个网络都必须有一个唯一的网络编号。路由器通过察看报文中IP地址,来

决定路径,向那个子网(下一跳)路由,也就是说交换机工作在数据链路层看MAC

地址,路由器工作在网际层看IP地质

但是由于现在网络设备的发展,很多设备既有交换机的功能有由路由器的功能(交

换试路由器)使得两者界限越来越模糊。

58:请问C++的类和C里面的suet有什么区别?

59:请讲一讲析构函数和虚函数的用法和作用?

60:全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知

道的?

全局变量是整个程序都可访问的变量,谁都可以访问,生存期在整个程序从运行到

结束(在程序结束时所占内存释放),而局部变量存在于模块(子程序,函数)中,只

有所在模块可以访问,其他模块不可直接访问,模块结束(函数调用完毕),局部变

量消失,所占据的内存释放。

全局变量分配在全局数据段并且在程序开始运行的时候被加载.局部变量则分配在

堆栈里面。

61:一些寄存器的题目,主要是寻址和内存管理等一些知识。

2、交换机用在局域网中,交换机通过纪录局域网内各节点机器的MAC地质(物理

地址)就可以实现传递报文,无需看报文中的IP地质。路由器识别不同网络的方法是

通过识别不同网络的网络ID号(IP地址的高端部分)进行的,所以为了保证路由成

功,每个网络都必须有一个唯一的网络编号。路由器通过察看报文中IP地址,来

决定路径,向那个子网(下一跳)路由,也就是说交换机工作在数据链路层看MAC

地址,路由器工作在网际层看IP地质

但是由于现在网络设备的发展,很多设备既有交换机的功能有由路由器的功能(交

换试路由器)使得两者界限越来越模糊。

3、IP协议是网络层的协议,它实现了Internet中自动路由的功能,即寻径的功

能,TCP协议是一个传输性的协议它向下屏蔽了IP协议不可靠传输的特性,向上

提供一个可靠的点到点的传输,UDP提供的是一种无连接的服务,主要考虑到很多

应用不需要可靠的连接,但需要快速的传输

4、

Testb();〃定义了一个函数

C++面试题集(3)

一追雨制作

39.解释局部变量、全局变量和静态变量的含义。

40.解释堆和栈的区别。

栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。

其操作方式类似于数据结构中的栈。

堆:一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意

它与数据结构中的堆是两回事,分配方式倒是类似于

链表.

41.论述含参数的宏与函数的优缺点。

42.以下三条输出语句分别输出什么?[C易]

charsl[]=

#8220;abc

chars2[]=

#8220;abc

constchars3[]=

#8220;abc

constchars4[]=

#8220;abc

constchar*s5=

#8220;abc

constchar*s6=

#8220;abc

cout

<

<boolalpha

<

<(sl==s2)

<

<endl;//输出什么?

cout

<

<boolalpha

<

<(s3==s4)

<

Vendl;〃输出什么?

cout

<

<boolalpha

<

<(s5==s6)

<

<endl;//输出什么?

43.非C++内建型别A和B,在哪几种情况下B能隐式转化为A?[C++中等]

答:

a.classB:publicA{……}〃B公有继承自A,可以是间接继承的

b.classB{operatorA();}//B实现了隐式转化为A的转化

c.classA{A(constB

amp;);}//A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函

d.A

amp;operator=(constA

amp;);〃赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个

44.以下代码中的两个sizeof用法有问题吗?[C易]

voidUpperCase(chars口)〃将s中的小写字母转换成大写字母

fbr(sizeti=0;i

<sizeof(s)/sizeof(s[0]);++i)

if(

#8216;a

#8217;

<=s[i]

amp;

amp;s[i]

<=

#8217;z

#8217;)

s[i]-=(

#8217;a'-

#8217;A

#8217;);

chars[]=

#8220;aBcDe

cout

<

<

#8220;s字符长度为:

<sizeof(s)/sizeof(s[0])

<

<endl;

UpperCase(s);

cout

<

<s

<

<endl;

45.以下代码有什么问题?[C难]

voidchar2Hex(charc)//将字符以16进制表示

charch=c/0

#215;10+

#8216;0

#8242;;if(ch>

#8216;9

#8242;)ch+=(

#8217;A'-

#8217;9

#8242;-1);

charcl=c%0

#215;10+

#8216;0

#8242;;if(cl>

#8216;9

#8242;)cl+=(

#8217;A'-

#8217;9

#8242;4);

cout

<

<ch

<

<cl

<

<

#8216;

#8216;;

chars[]=

#8220;Ilove中国

fbr(sizeti=0;i

<slen(s);++i)

char2Hex(s[i]);

cout

<

<endl;

46.以下代码有什么问题?[C++易]

suetTest

Test(int){}

Test(){}

voidfiin(){}

};

voidmain(void)

Testa(l);

a.fun();

Testb();

b.fun();

)

***Testb();〃定义了一个函数

47.以下代码有什么问题?[C++易]

cout

<

<(ue?1:

1

#8243;)

<

<endl;

8.以下代码能够编译通过吗,为什么?[C++易]

unsignedintconstsizel=2;

charsl[sizel];

unsignedinttemp=0;

cin»temp;

unsignedintconstsize2=temp;

chars2[size2];

48.以下代码中的输出语句输出0吗,为什么?[C++易]

suetCLS

{

intmi;

CLS(inti):m_i(i){}

CLS()

CLS(O);

);

CLSobj;

cout

<

<obj.mi

<

<endl;

49.C++中的空类,默认产生哪些类成员函数?[C++易]

答:

classEmpty

public:

Empty();//缺省构造函数

Empty(constEmpty

amp;);〃拷贝构造函数

~Empty();//析构函数

Empty

amp;operator=(constEmpty

amp;);//赋值运算符

Empty*operator

amp;();//取址运算符

constEmpty*operator

amp;()const;//取址运算符const

);

50.以下两条输出语句分别输出什么?[C++难]

floata=l.Of;

cout

<

<(int)a

<

<endl;

cout

<

<(int

amp;)a

<

<endl;

cout

<

<boolalpha

<

<((int)a==(int

amp;)a)

<

vendl;〃输出什么?

floatb=O.Of;

cout

<

<(int)b

<

<endl;

cout

<

<(int

amp;)b

<

<endl;

cout

<

<boolalpha

<

<((int)b=(int

amp;)b)

<

vendl;〃输出什么?

51.以下反向遍历array数组的方法有什么错误?[STL易]

vectorarray;

array.push_back(1);

array.push_back(2);

array.push_back(3);

fbr(vector::size_typei=array.size()-l;i>=0;

i)〃反向遍历array数组

cout

<

<array[i]

<

<endl;

C++面试题集(2)

一追雨制作

11下列哪两个是等同的

intb;

Aconstint*a=

amp;b;

Bconst*inta=

amp;b;

Cconstint*consta=

amp;b;

Dintconst*consta=

amp;b;

12内联函数在编译时是否做参数类型检查

13三个float:a,b,c

问值

(a+b)+c=(b+a)+c

(a+b)+c=(a+c)+b

14把一个链表反向填空

voidreverse(test*head)

(

test*pe=head;

test*ps=head->next;

while(ps)

(

pe->next=ps->next;

ps->next=head;

head=ps;

ps=pe->next;

}

}

15设计i个重采样系统,说明如何anti-alias

16某个程序在一个嵌入式系统Q00M的CPU,50M的SDRAM)中已经最化了,换到

另一个系统(300M的CPU,50M的SDRAM)中运行,还需要优化吗?

17.下面哪种排序法对12354最快

aquicksort

b.bublesort

c.mergesort

18.哪种结构,平均来讲,获取一个值最快

a.binaryee

b.hashtable

c.stack

19请问C++的类和C里面的suet有什么区别?

答:C++的类的成员默认情况下是私有的,C的suet的成员默认情况下是公共的.

20请讲一讲析构函数和虚函数的用法和作用?

答:析构函数的作用是当对象生命期结束时释放对象所占用的资源。析构函数用

法:析构函数是特殊的类成员函数

它的名字和类名相同,没有返回值,没有参数不能随意调用也没有重载。只是在类

对象生命期结束时有系统自动调用。

虚函数用在继承中,当在派生类中需要重新定义基类的函数时需要在基类中将该函

数声明为虚函数,作用为使程序支持动态联遍。

21全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知

道的?

答:一些变量整个程序中都是可见的,它们称为全局变量,•些变量在函数内部定

义且只在函数中可知,则称为局部变量。

全局变量由编译器建立且存放在内存的全局数据区,局部变量存放在栈区

22-些寄存器的题目,主要是寻址和内存管理等一些知识。

238086是多少尉的系统?在数据总线上是怎么实现的?

24多态。overload和override的区别。

答:重载在相同范围(同一个类中),函数名字相同,参数不同,virtual关键字可

有可无。

覆盖是指派生类函数覆盖基类函数,不同的范围,函数名字相同,参数相同,基类

函数必须有virtual关键字。

C++面试题集(1)

—追雨制作

1#include"filename.h”和#include

〈filename.h>的区别?

答:对于#include

<61ename.h>编译器从标准库开始搜索filename.h

对于#include“filename.h”编译器从用户工作路径开始搜索filename.h

2头文件的作用是什么?

答:一、通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公

布,只要向用户提供头文件和二进制的库即可。用户只需

要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会

从库中提取相应的代码。

二、头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文

件中的声明不一致,编译器就会指出错误,这一简单的规

则能大大减轻程序员调试、改错的负担。

3C++函数中值的传递方式有哪儿种?

答:C++函数的三种传递方式为:值传递、指针传递和引用传递。

4内存的分配方式的分配方式有几种?

答:一、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在

程序的整个运行期间都存在。例如全局变量。

二、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,

函数执行结束时这些存储单元自动被释放。栈内

存分配运

算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

三、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任

意多少的内存,程序员自己负责在何时用free

或delete释放

内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

5实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数;

答:双向链表删除一个节点P

template

<classtype>voidlist

::delnode(intp)

{

intk=l;

listnode

p=first;

while(p->next!=NULL

amp;

amp;k!=p)

p=p->next;

k++;

t=p->next;

cout

<

<

你已经将数据项

#8220;

<

<t->data

<

<

删除

<

<endl;

p->next=p->next->next;

length

9

deletet;

)

在节点P后插入一个节点:

template

<classtype>boollist

::insert(typet,intp)

listnode

*p;

p=first;

intk=l;

while(p!=NULL

amp;

amp;k

<P)

p=p->next;

k++;

if(p==NULL

amp;

amp;k!=p)

returnfalse;

else

listnode

*tp;

tp=newlistnode

tp->data=t;

tp->next=p->next;

p->next=tp;

length++;

returnue;

6写一个函数,将其中的\t都转换成4个空格。

voidchange(char*ps)

while(*ps++!=

#8216;\0

#8242;)

if(*ps==

#8216;\t

#8217;)

7Windows程序的入口是哪里?写出Windows消息机制的流程

8如何定义和实现一个类的成员函数为回调函数?

9C++里面是不是所有的动作都是main()引起的?如果不是,请举例.

答:在运行C++程序时,通常从main。函数开始执行。因此如果没有main。,程序将

不完整,编译器将指出未定义main()函数。

例外情况:如,在windows编程中,可以编写一个动态连接库(dll)模块,这是其

他windows程序可以使用的代码。由于

DLL模块不是独立的程序,因此不需要main().用于专用环境的程序

如机器人中的控制器芯片

可能不需要main().但常规的

独立程序都需要main().

10C++里面如何声明constvoidf(void)函数为C程序中的库函数?

摩托罗拉部分C++面试题

一追雨制作

1.介绍一下STL,详细说明STL如何实现vector。

2.如果用VC开发程序,常见这么儿个错误

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论