华为C++MFC面试题(附上个人答案不当之处请指正)_第1页
华为C++MFC面试题(附上个人答案不当之处请指正)_第2页
华为C++MFC面试题(附上个人答案不当之处请指正)_第3页
华为C++MFC面试题(附上个人答案不当之处请指正)_第4页
华为C++MFC面试题(附上个人答案不当之处请指正)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、华为C+MF(面试题(附上个人答案不当之处请指正 )pS :答案是本人随笔所写,可能不全甚至错误!请不要盲目将其作为标准答案,不当之处,请指正,谢谢。C+/MFC 试题一填空题 (26 分 )1 WIN32 平台下, sizeof(short) = _2_, sizeof(int) =_4_ , sizeof(long) =_4_ 。 (3 分 ) / sizeof(char) =1;sizeof(double) = 8;sizeof(float) = 4;2 请给出如下程序的结果 (2 分 )int a = 3;int b = a << 3; /00000011左移三位为 000

2、11000,即 24a = _3_ , b =_24_ 。3 请 给出如下程序的结果 (2 分 )int aaa = 0x01;htonl(aaa) = _16A6_。/ 0x01000000 十六进制数,转换为十进制为 16 的 6 次方,即 167772164 请给出如下程序的结果 (2 分 )#define MAX_NUM 100+200int nTemp = MAX_NUM*10;/ 宏的功能只是简单的字符替换,MAX_NUM* 1表0示 100+200*10,所以用宏要小心则 Temp = _2100_ 。5 请给出如下程序的结果 (3 分 )char szTemp1000 = &q

3、uot;"int nLen1 = sizeof(szTemp);int nLen2 = strlen(szTemp);/strlen的计算结果不包含结束符0strcpy(szTemp, "abc");int nLen3 = sizeof(szTemp);int nLen4 = strlen(szTemp);int nTemp100;int *pTemp = nTemp;int nLen5 = sizeof(pTemp);/在 32 位系统中,指针只占 4 位字节,不管它指向地址的内容有多大 !char szResult200 = ""sprin

4、tf(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 分

5、 ) / 进程 才有独立内存,堆栈属于内存的一部分8 调用函数 bbb 后,输出是什么 (4 分 )void c(int x) / 参数为数值传递,不是引用传递char szTemp10 = ""x = 2;sprintf(szTemp, "%d,", x);afxDump << szTemp; /afxDump 表示输出信息到 MF(调试(Debug) 窗口if(x = 3) /注意这里不是 "=" 而是 "=" ,所以 if 条件是成立的int x = 4;sprintf(szTemp, "

6、;%d,", x);afxDump << szTemp;sprintf(szTemp, "%d,", x);afxDump << szTemp;void bbb()char szTemp10 = ""int x = 7;c(x);sprintf(szTemp, "%d,", x);afxDump << szTemp;二改错题 ( 总共 15 分 , 每题 5 分 ) 。1 下面代码有何错误void func1()int *pa = NULL;func2(pa); / 函数返回后 pa 仍然

7、是空指针pa; / pa 仍然是空指针, pb 申请的空间并没有被掉void func2(int *pb)pb = new int(5); / pb重新申请了堆空间2 下面代码有何错误void func2(int *value)*value = 2; / value为空指针,不能被取值,所以 *value 是错误的void func1()int *p = 0;func2(p);3 int func1(int& b) /参数 b 的类型是整型return 0;void func2()int bbb = 3;func1(&bbb); / 函数参数的引用调用不需要用符号 "

8、&" func1(bbb);func2 中有何错误, func1 的参数 b 的类型是什么。 三简答题 (64 分 )pS: 以下答案是随笔所写,请读者做进一步的深入了解。1. 请简述 C 、 C+ 、 VC 、 MFC 在概念上的区别 (4 分 )答:C是面向过程编程的语言;C+ 是面向对象编程的语言;VC是微软提供的方便于开发 C+程序的一套开发工具。MFC(Microsoft Function Class ),是微软提供的一套函数类库, 里面封装了许多 WindowsApI函数,方便开发者调用。2 请写一个函数重载的简单例子 (4 分 )答:int add(int a,

9、int b)return (a+ b);函数重载: / 函数重载是指函数名相同,但参数类型或返回值 可能不同的函数。floatadd(float a,float b)return (a+ b);3. 用什么函数开启新进程、线程。 (4 分 )答: Createproess() 创建进程;CreateThread() 创建线程MFC 中还提供了 _beginthread() 与_beginthreadex() 函数创建线 程4.SendMessage 和 postMessage 有什么区别 (4 分 )答:SendMessage发送消息后,等待消息处理完毕后才继续执行 自身的程序。postMes

10、sage :发送消息后不等待消息处理即继续执行自身的程序。5.WaitForSingleObject 有何作用; m_pThrd 的类型是CWinThread* 时, WaitForSingleObject(m_pThrd->m_hThread,INFINITE); 有何作用。 (4 分 )答: WaitForSingleObject 是表示等待线程的一个函数。参数为INFINITE表示一直等待线程CWinThread执行结束后,再 继续处理自身程序。6._stdcall 、_cdecl 、_pascal 在什么方面有所不同。 (4分 )答:这些都是一些函数参数的调用约定,告诉编译器函数

11、参数压 栈的顺序, 以及压入堆栈的内容由谁来清除, 是调用者还是函数本身 清除堆栈的内容。简单列表如下:Directive parameterorder Clean-uppassesparametersinregisters? pascalLeft-to-rightRoutineNo cdeclRight-to-leftCallerNo stdcallRight-to-leftRoutineNo7 请把下述代码加上异常处理。 (6 分 )int MyWriteFile(CString strFileName, CString strText)int nRet = 0;CFile myFile;

12、 myFile.Open(strFileName,CFile:modeWrite|CFile:shareExclus ive|CFile:modeCreate,NULL);int nLen = strText.GetLength();myFile.Write(char*)(LpCSTR)strText, nLen);myFile.Close();return nRet;答:int MyWriteFile(CString strFileName, CString strText)int nRet = 0;CFile myFile;_trynRet= myFile.Open(strFileName

13、,CFile:modeWrite|CFile:shareExclusive|CFile:modeCreate,NU LL);if(!nRet)/ 输出异常信息_leave;/结束 try 块,跳到 _finaly 代码块int nLen = strText.GetLength();nRet = myFile.Write(char*)(LpCSTR)strText, nLen);if(!nRet)/ 输出异常信息_leave;/结束 try 块,跳到 _finaly 代码块_finalymyFile.Close();returnnRet;8 请解释“ func ”为何种类型,这种类型的作用什么,

14、 变量 ttt 的值是多少? (6 分 )typedef int (*func)(int, int*);int xxx(int a, int *p)return a + *p;int dowork(func aaa, int bbb, int *c)return aaa(bbb, c);int sss = 4;int ttt = dowork(&xxx, 3,&sss);答: func 表示一个函数指针,它指向参数为 int ,int* ,返回值为 int 的函数。 ttt 的值为 79 .请问下述代码中:int operato叶()起什么作用?this是什么? c 的值最终为

15、多少? (6 分)class Fruitpublic:Fruit()weight = 2;Fruit(int w)weight = w;int operator+(Fruit f)return this->weight * f.weight;private:int weight;Fruit aaa;Fruit bbb(4);int c = aaa + bbb;答:int operator+( )表示重载类的“ +”号运算符,this表 示对象本身的指针, 本例中它指向类的对象 aaa;c 最终的结果为 8(8 = 2 *4) 。10. 请解释下面代码采用了何种 C+ 特性( C 语言不具

16、备), 作用是什么? (6 分 )templateT sum(T a, T b)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_0598A39D2DA4INCLUDED_#endif答:这是预处理命令,可以保证多次包含此头文件时,只

17、编译一 次代码。12 CMemoryState 主要功能是什么 (5 分 ) 答:用于检测内存泄露。13 请阅读下述代码,写出程序执行的结果( 6 分) #includeusing namespace std;class CBasepublic:virtual void print()cout<< "base"<< endl;void Doprint()print();class CChild1: public CBasepublic:virtual void print()cout<< "child1"<< endl;class CChild2: public CBasepublic:virtual void print()cout<< "child2"<< endl;void Doprint(CBase

温馨提示

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

评论

0/150

提交评论