面试题

 

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:

           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++中类的虚函数实现多态的一个实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值