C++/MFC试题
一.填空题
1 . WIN32 平台下, sizeof(short) = __2__ , sizeof(int) = __4__ , sizeof(long) = __4__ 。
2 .请给出如下程序的结果
int a = 3;
int b = a << 3;
a = __3__ , b = __24__ 。
3.请给出如下程序的结果
int aaa = 0x01;
htonl(aaa) = _16777216___ 。 //这题运行显示的是16777216,我觉得可能是随机值
4 .请给出如下程序的结果
#define MAX_NUM 100+200
int nTemp = MAX_NUM*10;
则 Temp = __2100__ 。
5 .请给出如下程序的结果
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 = ____ 。
6 . MFC 中,大部分类是从哪个类继承而来( CCmdTarget 、 CObject 、 CWinApp 、 CWnd )?__CObject __
7 .内存是进程范围 or 线程范围; ____ CPU 调度时,针对进程 or 线程;____ 函数调用堆栈,针对进程or 线程。____
8 .调用函数 bbb 后,输出是什么
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;
}
二.改错题
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); //&bbb是去bbb的地址,与func1的形参不符
func1(bbb);
}
func2 中有何错误, func1 的参数 b 的类型是什么。 //func1的参数b的类型为int型
三.简答题
1. 请简述 C 、 C++ 、 VC 、 MFC 在概念上的区别
2 .请写一个函数重载的简单例子
3. 用什么函数开启新进程、线程。
4.SendMessage 和PostMessage 有什么区别
5.WaitForSingleObject 有何作用; m_pThrd 的类型是 CWinThread* 时, WaitForSingleObject(m_pThrd->m_hThread, INFINITE); 有何作用。
6. __stdcall 、 __cdecl 、 __pascal 在什么方面有所不同。
7 .请把下述代码加上异常处理。
int MyWriteFile(CString strFileName, CString strText)
{
int nRet = 0;
CFile myFile;
myFile.Open(strFileName, CFile::modeWrite|CFile::shareExclusive|C
File::modeCreate, NULL);
int nLen = strText.GetLength();
myFile.Write((char*)(LPCSTR)strText, nLen);
myFile.Close();
return nRet;
}
8 .请解释“ func ”为何种类型,这种类型的作用什么,变量 ttt 的值是多少?
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 的值最终为多少?
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 语言不具备),作用是什么?
template<typename T>
T sum(T a, T b)
{
return (a + b);
} //函数模板,用于将一类功能相同,参数类型和返回值不同的函数抽象为一个模板,方便模板函数调用。
11 .请解释 aaa.h 中下面代码的功能
#if !defined(AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCL
UDED_)
#define AFX_MYSUDU_H__9B952BEA_A051_4026_B4E5_0598A39D2DA4__INCLUDED_
... ...
#endif
//预处理命令,可以保证多次包含此头文件时,只编译一次代码
12 . CMemoryState 主要功能是什么
13 .请阅读下述代码,写出程序执行的结果
#include <iostream>
using namespace std;
class CBase
{
public:
};
class CChild1: public CBase
{
public:
};
class CChild2: public CBase
{
public:
};
void DoPrint(CBase *base)
{
}
void main()
{
delete base;
}
答:
child1
child2
base
child1
这是C++中类的虚函数实现多态的一个实例。