C++ 笔试题(一)
2013-05-15 16:56
267 查看
C++/MFC
试题
一.填空题 (26
分 )
1 . WIN32 平台下, sizeof(short) = __2__, sizeof(int) = __4__,
sizeof(long) = __4__。 (3分 )
2 .请给出如下程序的结果 (2
分 )
int a = 3;
int b = a << 3;
a = __3__ , b = __24__。
3 .请给出如下程序的结果 (2分 )
int aaa = 0x01;
htonl(aaa) = _16777216___
。 //这题运行显示的是16777216,我觉得可能是随机值
4 .请给出如下程序的结果 (2
分 )
#define MAX_NUM 100+200
int nTemp = MAX_NUM*10;
则 Temp = __2100__。
5 .请给出如下程序的结果 (3
分 )
则 szResult = ___1000,0,1000,3,04._
。
6 . MFC 中,大部分类是从哪个类继承而来( CCmdTarget、 CObject、 CWinApp、 CWnd)?
(2分 )__CObject __
7 .内存是进程范围 or
线程范围; ____
CPU 调度时,针对进程 or
线程; ____
函数调用堆栈,针对进程 or
线程。 ____(3 分 )
8 .调用函数 bbb 后,输出是什么 (4分 )
2,4,3,7
二.改错题 (
总共 15 分 ,
每题 5 分 )
。
1 .下面代码有何错误
2 .下面代码有何错误
func2 中有何错误, func1
的参数 b 的类型是什么。
三.简答题 (64
分 )
1. 请简述 C 、 C++、 VC、 MFC在概念上的区别 (4分 )
2 .请写一个函数重载的简单例子 (4
分 )
3. 用什么函数开启新进程、线程。 (4
分 )
4.SendMessage 和 PostMessage
有什么区别 (4 分 )
5.WaitForSingleObject 有何作用; m_pThrd
的类型是 CWinThread* 时, WaitForSingleObject(m_pThrd->m_hThread, INFINITE);有何作用。 (4分 )
等待线程m_pThrd->m_hThread结束。
6. __stdcall 、 __cdecl
、 __pascal 在什么方面有所不同。 (4
分 )
函数调用规则不一样。
_cdecl,所谓的C调用规则。按从右至左的顺序压参数入栈,由调用者把参数弹出栈。编译器在编译的时候对这种调用规则的函数生成修饰名的时候,仅在输出函数名前加上一个下划线前缀,格式为_functionname。
_stdcall 按从右至左的顺序压参数入栈,由被调用者把参数弹出栈。_stdcall是Pascal程序的缺省调用方式,通常用于Win32 API中。
__stdcall调用约定在输出函数名前加上一个下划线前缀,后面加上一个“@”符号和其参数的字节数,格式为_functionname@number。如函数int func(int a, double b)的修饰名是_func@12。
_pascal,这种规则从左向右传递参数,通过EAX返回,堆栈由被调用者清除。
7 .请把下述代码加上异常处理。 (6
分 )
8 .请解释“ func ”为何种类型,这种类型的作用什么,变量 ttt的值是多少? (6分 )
9 .请问下述代码中 : int operator+(…
)起什么作用? this 是什么? ccc
的值最终为多少? (6 分 )
10. 请解释下面代码采用了何种 C++
特性( C 语言不具备),作用是什么? (6
分 )
11 .请解释 aaa.h
中下面代码的功能 (5 分 )
答案: 防止重复include头文件。
12 . CMemoryState
主要功能是什么 (5 分 )
检查MFC是否有内存泄露。
13 .请阅读下述代码,写出程序执行的结果( 6
分)
答案:
child1
child2
base
child1
试题
一.填空题 (26
分 )
1 . WIN32 平台下, sizeof(short) = __2__, sizeof(int) = __4__,
sizeof(long) = __4__。 (3分 )
2 .请给出如下程序的结果 (2
分 )
int a = 3;
int b = a << 3;
a = __3__ , b = __24__。
3 .请给出如下程序的结果 (2分 )
int aaa = 0x01;
htonl(aaa) = _16777216___
。 //这题运行显示的是16777216,我觉得可能是随机值
4 .请给出如下程序的结果 (2
分 )
#define MAX_NUM 100+200
int nTemp = MAX_NUM*10;
则 Temp = __2100__。
5 .请给出如下程序的结果 (3
分 )
char szTemp[1000] = ""; int nLen1 = sizeof(szTemp); int nLen2 = strlen(szTemp); strcpy(szTemp, "abc"); int nLen3 = sizeof(szTemp); int nLen4 = strlen(szTemp); int nTemp[100]; int *pTemp = nTemp; int nLen5 = sizeof(pTemp); char szResult[200] = ""; sprintf(szResult, "%d,%d,%d,%d,%02d.", 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分 )
void ccc(int x) { char szTemp[10] = ""; x = 2; sprintf(szTemp, "%d,", x); afxDump << szTemp; if(x = 3) { int x = 4; sprintf(szTemp, "%d,", x); afxDump << szTemp; } sprintf(szTemp, "%d,", x); afxDump << szTemp; } void bbb() { char szTemp[10] = ""; int x = 7; ccc(x); sprintf(szTemp, "%d,", x); afxDump << szTemp; }
2,4,3,7
二.改错题 (
总共 15 分 ,
每题 5 分 )
。
1 .下面代码有何错误
void func1() { int *pa = NULL; func2(pa); delete pa; } void func2(int *pb) { pb = new int(5); }
2 .下面代码有何错误
void func2(int *value) { *value = 2; } void func1() { int *p = 0; func2(p); } 3 . int func1(int& b) { return 0; } void func2() { int bbb = 3; func1(&bbb); func1(bbb); }
func2 中有何错误, func1
的参数 b 的类型是什么。
三.简答题 (64
分 )
1. 请简述 C 、 C++、 VC、 MFC在概念上的区别 (4分 )
2 .请写一个函数重载的简单例子 (4
分 )
3. 用什么函数开启新进程、线程。 (4
分 )
4.SendMessage 和 PostMessage
有什么区别 (4 分 )
5.WaitForSingleObject 有何作用; m_pThrd
的类型是 CWinThread* 时, WaitForSingleObject(m_pThrd->m_hThread, INFINITE);有何作用。 (4分 )
等待线程m_pThrd->m_hThread结束。
6. __stdcall 、 __cdecl
、 __pascal 在什么方面有所不同。 (4
分 )
函数调用规则不一样。
_cdecl,所谓的C调用规则。按从右至左的顺序压参数入栈,由调用者把参数弹出栈。编译器在编译的时候对这种调用规则的函数生成修饰名的时候,仅在输出函数名前加上一个下划线前缀,格式为_functionname。
_stdcall 按从右至左的顺序压参数入栈,由被调用者把参数弹出栈。_stdcall是Pascal程序的缺省调用方式,通常用于Win32 API中。
__stdcall调用约定在输出函数名前加上一个下划线前缀,后面加上一个“@”符号和其参数的字节数,格式为_functionname@number。如函数int func(int a, double b)的修饰名是_func@12。
_pascal,这种规则从左向右传递参数,通过EAX返回,堆栈由被调用者清除。
7 .请把下述代码加上异常处理。 (6
分 )
int MyWriteFile(CString strFileName, CString strText) { int nRet = 0; CFile myFile; myFile.Open(strFileName, CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL); int nLen = strText.GetLength(); myFile.Write((char*)(LPCSTR)strText, nLen); myFile.Close(); return nRet; }
8 .请解释“ func ”为何种类型,这种类型的作用什么,变量 ttt的值是多少? (6分 )
typedef int (*func)(int, int*); int xxx(int a, int *p) { return a + *p; } int dowork(func aaa, int bbb, int *ccc) { return aaa(bbb, ccc); } int sss = 4; int ttt = dowork(&xxx, 3, &sss);
9 .请问下述代码中 : int operator+(…
)起什么作用? this 是什么? ccc
的值最终为多少? (6 分 )
class Fruit { public: 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 ccc = aaa + bbb;
10. 请解释下面代码采用了何种 C++
特性( C 语言不具备),作用是什么? (6
分 )
template<typename T> T sum(T a, T b) { return (a + b); }
11 .请解释 aaa.h
中下面代码的功能 (5 分 )
#if !defined(AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_) #define AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_ ... ... #endif
答案: 防止重复include头文件。
12 . CMemoryState
主要功能是什么 (5 分 )
检查MFC是否有内存泄露。
// Declare the variables needed #ifdef _DEBUG CMemoryState oldMemState, newMemState, diffMemState; oldMemState.Checkpoint(); #endif // Do your memory allocations and deallocations. CString s("This is a frame variable"); // The next object is a heap object. CPerson* p = new CPerson( "Smith", "Alan", "581-0215" ); #ifdef _DEBUG newMemState.Checkpoint(); if( diffMemState.Difference( oldMemState, newMemState ) ) { TRACE( "Memory leaked!\n" ); } #endif
13 .请阅读下述代码,写出程序执行的结果( 6
分)
#include <iostream> using namespace std; class CBase { public: virtual void print() { cout<< "base" << endl; } void DoPrint() { print(); } }; class CChild1: public CBase { public: virtual void print() { cout<< "child1" << endl; } }; class CChild2: public CBase { public: virtual void print() { cout<< "child2" << endl; } }; void DoPrint(CBase *base) { base->DoPrint(); } void main() { CBase* base = new CBase(); CChild1* child1 = new CChild1(); CChild2* child2 = new CChild2(); DoPrint(child1); DoPrint(child2); DoPrint(base); delete base; base = child1; base->print(); delete child1; delete child2; }
答案:
child1
child2
base
child1
相关文章推荐
- c++笔试题目大全
- C++笔试面试宝典总结
- 2011阿里巴巴集团实习生招聘笔试题 C&C++ .
- C/C++笔试题(9)
- 【笔试准备】写出程序输出结果C/C++
- 九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题) C++版
- 写程序说明C++中成员函数的初始化顺序只跟在类中的声明顺序有关, 而跟初始化列表中的顺序无关(笔试考过)
- 网易笔试编程题:两种排序方法(C++)
- 网易笔试编程题:小易喜欢的单词(C++)
- C/C++ 笔试、面试题目汇总1——代码相关
- C++笔试题
- C/C++校招笔试面试经典题目总结八
- 嵌入式笔试面试题:C和C++汇总试题(2)
- C/C++笔试系列--经典C++笔试题解析1
- C/C++笔试系列--经典C++笔试题解析2
- 珠海某外企在线C++笔试题(算法)二面
- C++简单笔试题8道
- 【转帖】C/C++ 笔试、面试题目大汇总
- C++面试笔试经典题集
- C/C++笔试系列--经典C++笔试题解析4