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 )

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 )? (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;

}

 

二.改错题 ( 总共 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 )

6. __stdcall __cdecl __pascal 在什么方面有所不同。 (4 )

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

 

 

12 CMemoryState 主要功能是什么 (5 )

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;

}