第一范文网 - 专业文章范例文档资料分享平台

C++MFC面试题

来源:用户分享 时间:2025/5/18 23:22:39 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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左移三位为00011000,即24 a = __3__ , b = __24__ 。 3 .请 给出如下程序的结果 (2 分 ) int aaa = 0x01;

htonl(aaa) = _16^6___ 。/// 0x01000000 十六进制数,转换为十进制为16的6次方,即16777216

4 .请给出如下程序的结果 (2 分) #define MAX_NUM 100+200

int nTemp = MAX_NUM*10; ///宏的功能只是简单的字符替换,MAX_NUM*10表示100+200*10,所以用宏要小心 则 Temp = __2100__ 。

5 .请给出如下程序的结果 (3 分 ) char szTemp[1000] = \ int nLen1 = sizeof(szTemp);

int nLen2 = strlen(szTemp);/// strlen的计算结果不包含结束符'\\0' strcpy(szTemp, \ int nLen3 = sizeof(szTemp); int nLen4 = strlen(szTemp); int nTemp[100]; int *pTemp = nTemp;

int nLen5 = sizeof(pTemp);/// 在32位系统中,指针只占4位字节,不管它指向地址的内容有多大!

char szResult[200] = \

sprintf(szResult, \ 则 szResult = _ 1000,0,1000,3,04___ 。 6 . MFC 中,大部分类是从哪个类继承而来

( CCmdTarget 、 CObject 、 CWinApp 、 CWnd )? (2 分)__CObject __

7 .内存是进程范围 or 线程范围; __进程__ /// 进程有独立的内存,是线程的管理者,线程是进程的执行者

CPU 调度时,针对进程 or 线程; __线程__ /// 线程才是执行者

函数调用堆栈,针对进程 or 线程。 _进程_(3 分 ) /// 进程才有独立内存,堆栈属于内存的一部分

8 .调用函数 bbb 后,输出是什么 (4 分 )

void ccc(int x) /// 参数为数值传递,不是引用传递 {

char szTemp[10] = \ x = 2;

sprintf(szTemp, \

afxDump << szTemp; /// afxDump表示输出信息到MFC调试(Debug)窗口 if(x = 3) ///注意这里不是\而是\,所以if条件是成立的 {

int x = 4;

sprintf(szTemp, \ afxDump << szTemp; }

sprintf(szTemp, \ afxDump << szTemp; }

void bbb() {

char szTemp[10] = \ int x = 7; ccc(x);

sprintf(szTemp, \ afxDump << szTemp; } 1

void func1() {

int *pa = NULL;

func2(pa); /// 函数返回后pa仍然是空指针

delete pa; /// pa仍然是空指针,pb申请的空间并没有被delete掉

}

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); /// 函数参数的引用调用不需要用符号\ func1(bbb); }

func2 中有何错误, func1 的参数 b 的类型是什么。

1. 请简述 C 、 C++ 、 VC 、 MFC 在概念上的区别 (4 分 ) 答:C是面向过程编程的语言; C++是面向对象编程的语言;

VC是微软提供的方便于开发C++程序的一套开发工具。

MFC(Microsoft Function Class),是微软提供的一套函数类库,里面封装了许多Windows API函数,方便开发者调用。

2 .请写一个函数重载的简单例子 (4 分 ) 答:

int add(int a,int b) {

return (a + b); }

函数重载:/// 函数重载是指函数名相同,但参数类型或返回值可能不同的函数。 float add(float a,float b) {

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 分 )

答:这些都是一些函数参数的调用约定,告诉编译器函数参数压栈的顺序,以及压入堆栈的内容由谁来清除,是调用者还是函数本身清除堆栈的内容。简单列表如下: Directive Parameter order Clean-up Passes parameters in registers? pascal Left-to-right Routine No cdecl Right-to-left Caller No stdcall Right-to-left Routine No 7 .请把下述代码加上异常处理。 (6 分 )

int MyWriteFile(CString strFileName, CString strText) {

int nRet = 0;

搜索更多关于: C++MFC面试题 的文档
C++MFC面试题.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0t5an923mb1emx12t1l2_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top