原标题:世界五百强IT企业最新C++经典面试题及答案

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, "abc");

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, "%d,%d,%d,%d,d.", 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; /// afxDump表示输出信息到MFC调试(Debug)窗口

if(x = 3) ///注意这里不是"=="而是"=",所以if条件是成立的

{

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); ///函数返回后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

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

答:这些都是一些函数参数的调用约定,告诉编译器函数参数压栈的顺序,以及压入堆栈的内容由谁来清除,是调用者还是函数本身清除堆栈的内容。简单列表如下:

Directive Parameter order Clean-up Passes parameters in registers?pascal Left-to-right Routine Nocdecl Right-to-left Caller Nostdcall Right-to-left Routine No

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;

}

答:

int MyWriteFile(CString strFileName, CString strText)

{

int nRet = 0;

CFile myFile;

__try

{

nRet = myFile.Open(strFileName,\

CFile::modeWrite|CFile::shareExclusive|CFile::modeCreate, NULL);

if(!nRet)

{

///输出异常信息

__leave;///结束try块,跳到__finaly代码块

}

int nLen = strText.GetLength();

nRet = myFile.Write((char*)(LPCSTR)strText, nLen);

if(!nRet)

{

///输出异常信息

__leave;///结束try块,跳到__finaly代码块

}

}

__finaly

{

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

func

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;

答:int operator+(…)表示重载类的“+”号运算符,this表示对象本身的指针,本例中它指向类的对象aaa;ccc最终的结果为8(8 = 2 * 4)。

10.请解释下面代码采用了何种 C++特性( C语言不具备),作用是什么? (6分 )

template

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

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++中类的虚函数实现多态的一个实例。返回搜狐,查看更多

责任编辑:

世界五百强面试题计算机,世界五百强IT企业最新C++经典面试题及答案相关推荐

  1. 企业运维经典面试题汇总(5)

    1.git和svn 的区别 Git是分布式的,而Svn不是分布的 Git把内容按元数据方式存储,而SVN是按文件 Git没有一个全局版本号,而SVN有:目前为止这是跟SVN相比Git缺少的最大的一个特 ...

  2. 企业运维经典面试题汇总(3)

    1.docker命令 容器生命周期管理 - docker [run|start|stop|restart|kill|rm|pause|unpause] 容器操作运维 - docker [ps|insp ...

  3. 企业运维经典面试题汇总(2)

    1.写一个脚本查找最后创建时间是三天前,后缀是*.log的文件并删除 find .-ctime +3 -name '*.log' | rm -rf 2.统计ip访问情况,要求分析nginx访问日志,找 ...

  4. 企业运维经典面试题汇总(4)

    1.如何过滤出已知当前目录下yangwen中的所有一级目录(提示:不包含yangwen目录下面目录的子目录及隐藏目录,即只能是一级目录)? 解答: 方法1:通过find直接查找指定类型的文件 [roo ...

  5. 企业运维经典面试题汇总 (1)

    1.如何过滤出已知当前目录下yangwen中的所有一级目录(提示:不包含yangwen目录下面目录的子目录及隐藏目录,即只能是一级目录)? 解答: 方法1:通过find直接查找指定类型的文件 [roo ...

  6. 2022年最新数据库经典面试题及答案汇总(含PostgreSQL、Oracle、MySQL)

    随着企业数字化需求的增加,数据库行业发展日益壮大,企业对DBA岗位的需求也处于逐步增加中.我们梳理了墨天轮平台上2022年最新的一批数据库经典面试题,主要包含PostgreSQL.MySQL和Orac ...

  7. 计算机考研百天,2015考研计算机专业复习百天周计划

    计算机百天冲刺周计划 学习目标篇 百天计划第一周(9月26日-10月6日) 1.完成数据结构中线性表的复习;并配以习题巩固练习. 2.完成强化课程数据结构第一章的学习,重难点针对复习. 3.完成数据结 ...

  8. 大学计算机实验五北理工,北京理工大学计算机实验五报告表

    实验五实验报告表 实验名称: 学号:姓名:班级:实验时间: 实验报告表5–1进程同步实验观察结果记录表 进程1 操作步数进程1状态转换情况记录 1进程1申请资源A1个 2操作系统返回进程1资源A1个 ...

  9. 2022最新前端经典面试试题

    原文地址 手机看面试题 [web面试助手] 1,阐述清楚浮动的几种方式(常见问题) (1)父级div定义 height 原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题 ...

  10. php程序员试卷无答案,2019年最新PHP经典面试题及答案,PHP程序员必看

    1.用最少的代码写一个求3值最大值的函数.function who($a,$b,$c) { return $a > $b ? ($a > $c ? $a : $c) : ($b > ...

最新文章

  1. LeetCode实战:缺失的第一个正数
  2. 集成git怎样更新代码_持续集成之理论篇
  3. 同步、异步;阻塞、非阻塞
  4. SparseArrayE详解
  5. 利用批处理自动执行sql脚本、备份、还原数据库
  6. PL/SQL详细介绍
  7. “约见”面试官系列之常见面试题第十三篇之css动画效果(建议收藏)
  8. 第二篇:对CART,Gradient Boost,Xgboost,LightGBM的学习
  9. 体操冠军江钰源:妈妈你不要去讨饭了
  10. setmaximumsize java_setMaximumSize为什么不起作用
  11. js中 clientHeight、offsetHeight、scrollHeight的区别
  12. python爬虫项目报告需求分析_网络爬虫需求分析报告
  13. nodejs下载安装及配置环境
  14. Python完成电脑记事本软件的详细过程
  15. python日期相减得到年龄_在dataframe两列日期相减并且得到具体的月数实例
  16. 风行 词:许巍 摄影:小虫子
  17. Python笔记day04(基础)|列表、元组
  18. linux--Flex and Bison
  19. 计算机专业的创新创业之路,大学生创新创业项目对计算机专业建设的有益探索.doc...
  20. 源创媒:创建百科词条有什么注意事项?

热门文章

  1. 77. Combinations
  2. 高级语言与低级语言如何定义?解释型语言和编译型语言又如何区别?
  3. 润和大数据负责人崔凯参加PostgreSQL中国技术大会
  4. 华科师兄快40岁才明白的道理
  5. python中的translate函数_Python:内置函数makestrans()、translate()
  6. 阿里云图片服务器OSS对象存储器使用方法(附详细步骤)
  7. PS1545L-ASEMI低压降肖特基二极管PS1545L
  8. 如何使用python刷博客浏览量---第二种方法
  9. Android面试(下篇)
  10. 2008年国际十大财经新闻