C++MFC面试题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1.WIN32平台下,sizeof(short)=__2__,sizeof(int)=__4__,sizeof(long)=__4__。(3分)///sizeof(char)=1;sizeof(double)=8;sizeof(float)=4;2.请给出如下程序的结果(2分)inta=3;intb=a3;///00000011左移三位为00011000,即24a=__3__,b=__24__。3.请给出如下程序的结果(2分)intaaa=0x01;htonl(aaa)=_16^6___。///0x01000000十六进制数,转换为十进制为16的6次方,即167772164.请给出如下程序的结果(2分)#defineMAX_NUM100+200intnTemp=MAX_NUM*10;///宏的功能只是简单的字符替换,MAX_NUM*10表示100+200*10,所以用宏要小心则Temp=__2100__。5.请给出如下程序的结果(3分)charszTemp[1000]=;intnLen1=sizeof(szTemp);intnLen2=strlen(szTemp);///strlen的计算结果不包含结束符'\0'strcpy(szTemp,abc);intnLen3=sizeof(szTemp);intnLen4=strlen(szTemp);intnTemp[100];int*pTemp=nTemp;intnLen5=sizeof(pTemp);///在32位系统中,指针只占4位字节,不管它指向地址的内容有多大!charszResult[200]=;sprintf(szResult,%d,%d,%d,%d,d.,nLen1,nLen2,nLen3,nLen4,nLen5);则szResult=_1000,0,1000,3,04___。6.MFC中,大部分类是从哪个类继承而来(CCmdTarget、CObject、CWinApp、CWnd)?(2分)__CObject__7.内存是进程范围or线程范围;__进程__///进程有独立的内存,是线程的管理者,线程是进程的执行者CPU调度时,针对进程or线程;__线程__///线程才是执行者函数调用堆栈,针对进程or线程。_进程_(3分)///进程才有独立内存,堆栈属于内存的一部分8.调用函数bbb后,输出是什么(4分)voidccc(intx)///参数为数值传递,不是引用传递{charszTemp[10]=;x=2;sprintf(szTemp,%d,,x);afxDumpszTemp;///afxDump表示输出信息到MFC调试(Debug)窗口if(x=3)///注意这里不是==而是=,所以if条件是成立的{intx=4;sprintf(szTemp,%d,,x);afxDumpszTemp;}sprintf(szTemp,%d,,x);afxDumpszTemp;}voidbbb(){charszTemp[10]=;intx=7;ccc(x);sprintf(szTemp,%d,,x);afxDumpszTemp;}1voidfunc1(){int*pa=NULL;func2(pa);///函数返回后pa仍然是空指针deletepa;///pa仍然是空指针,pb申请的空间并没有被delete掉}voidfunc2(int*pb){pb=newint(5);///pb重新申请了堆空间}2.下面代码有何错误voidfunc2(int*value){*value=2;///value为空指针,不能被取值,所以*value是错误的}voidfunc1(){int*p=0;func2(p);}3.下面代码有何错误intfunc1(int&b)///参数b的类型是整型{return0;}voidfunc2(){intbbb=3;func1(&bbb);///函数参数的引用调用不需要用符号&func1(bbb);}func2中有何错误,func1的参数b的类型是什么。1.请简述C、C++、VC、MFC在概念上的区别(4分)答:C是面向过程编程的语言;C++是面向对象编程的语言;VC是微软提供的方便于开发C++程序的一套开发工具。MFC(MicrosoftFunctionClass),是微软提供的一套函数类库,里面封装了许多WindowsAPI函数,方便开发者调用。2.请写一个函数重载的简单例子(4分)答:intadd(inta,intb){return(a+b);}函数重载:///函数重载是指函数名相同,但参数类型或返回值可能不同的函数。floatadd(floata,floatb){return(a+b);}3.用什么函数开启新进程、线程。(4分)答:CreateProccess()创建进程;CreateThread()创建线程MFC中还提供了_beginthread()与_beginthreadex()函数创建线程4.SendMessage和PostMessage有什么区别(4分)答:SendMessage:发送消息后,等待消息处理完毕后才继续执行自身的程序。PostMessage:发送消息后不等待消息处理即继续执行自身的程序。5.WaitForSingleObject有何作用;m_pThrd的类型是CWinThread*时,WaitForSingleObject(m_pThrd-m_hThread,INFINITE);有何作用。(4分)答:WaitForSingleObject是表示等待线程的一个函数。参数为INFINITE表示一直等待线程CWinThread执行结束后,再继续处理自身程序。6.__stdcall、__cdecl、__pascal在什么方面有所不同。(4分)答:这些都是一些函数参数的调用约定,告诉编译器函数参数压栈的顺序,以及压入堆栈的内容由谁来清除,是调用者还是函数本身清除堆栈的内容。简单列表如下:DirectiveParameterorderClean-upPassesparametersinregisters?pascalLeft-to-rightRoutineNocdeclRight-to-leftCallerNostdcallRight-to-leftRoutineNo7.请把下述代码加上异常处理。(6分)intMyWriteFile(CStringstrFileName,CStringstrText){intnRet=0;CFilemyFile;myFile.Open(strFileName,CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate,NULL);intnLen=strText.GetLength();myFile.Write((char*)(LPCSTR)strText,nLen);myFile.Close();returnnRet;}答:intMyWriteFile(CStringstrFileName,CStringstrText){intnRet=0;CFilemyFile;__try{nRet=myFile.Open(strFileName,\CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate,NULL);if(!nRet){///输出异常信息__leave;///结束try块,跳到__finaly代码块}intnLen=strText.GetLength();nRet=myFile.Write((char*)(LPCSTR)strText,nLen);if(!nRet){///输出异常信息__leave;///结束try块,跳到__finaly代码块}}__finaly{myFile.Close();}returnnRet;}8.请解释“func”为何种类型,这种类型的作用什么,变量ttt的值是多少?(6分)typedefint(*func)(int,int*);intxxx(inta,int*p){returna+*p;}intdowork(funcaaa,intbbb,int*ccc){returnaaa(bbb,ccc);}intsss=4;intttt=dowork(&xxx,3,&sss);答:func表示一个函数指针,它指向参数为int,int*,返回值为int的函数。ttt的值为79.请问下述代码中:intoperator+(…)起什么作用?this是什么?ccc的值最终为多少?(6分)classFruit{public:Fruit(){weight=2;}Fruit(intw){weight=w;}intoperator+(Fruitf){returnthis-weight*f.weight;}private:intweight;};Fruitaaa;Fruitbbb(4);intccc=aaa+bbb;答:intoperator+(…)表示重载类的“+”号运算符,this表示对象本身的指针,本例中它指向类的对象aaa;ccc最终的结果为8(8=2*4)。10.请解释下面代码采用了何种C++特性(C语言不具备),作用是什么?(6分)templatetypenameTTsum(Ta,Tb){return(a+b);}答:表示函数模板,用于将一类功能相同,参数类型和返回值不同的函数抽象为一个模板,方便模板函数调用。11.请解释aaa.h中下面代码的功能(5分)#if!defined(AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_)#defineAFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_......#endif12.CMemoryState主要功能是什么(5分)答:用于检测内存泄露。(分配了内存而没有释放,逐渐耗尽内存资源,导致系统崩溃。内存泄露是指程序中间动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况,重起计算机可以解决,但是也有可能再次发生内存泄露,内存泄露和硬件没有关系,它是由软件引起的。)13.请阅读下述代码,写出程序执行的结果(6分)#includeiostreamusingnamespacestd;classCBase{public:virtualvoidprint(){coutbaseendl;}voidDoPrint(){print();}};classCChild1:publicCBase{public:virtualvoidprint(){coutchild1endl;}};classCChild2:publicCBase{public:virtualvoidprint(){coutchild2endl;}};voidDoPrint(CBase*base){base-DoPrint();}voidmain(){CBase*base=newCBase();CChild1*child1=newCChild1();CChild2*child2=newCChild2();DoPrint(child1);DoPrint(child2);DoPrint(base);deletebase;base=child1;base-print();deletechild1;deletechild2;}答:child1child2basechild1(这是C++中类的虚函数实现多态的一个实例。

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功