面试常见cc问题_第1页
面试常见cc问题_第2页
面试常见cc问题_第3页
面试常见cc问题_第4页
面试常见cc问题_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(1).头文件中的 ifndef/define/endif 干什么用?预处理(2). i nclude 和 i nclude “filename.h”区别?3.sic C、C+中的用法在 C 中 sic 用来修饰局部静态变量和外部静态变量、函数。而 C+中除了上述功能外,还用来定义类的成员变量和函数。即静态成员和静态成员函数。注意:编程时 sic 的性,和全局性的特点可以让在不同时期调用的函数进行通信,传递信息,而 C+的静态成员则可以在多个对象实例间进行通信,传递信息。1. C 中 sic作用(1)隐藏。 当 同时编译多个文件时,所有未加 s ic 前缀的全局变量和函数都具有全局可见性,故使

2、用 s ic 在不同的文件中定义同名函数和同名变量,而不必担心命名 。(2)s ic 的第二个作用是保持变量内容的持久。 在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量在静态区:全局变量和 sic 变量。(3)sic 的第三个作用是默认初始化为 0.其实全局变量也具备这一属性,因为全局变量也在静态数据区。在静态数据区,内存中所有的字节默认值都是 000,某些时候这一特点可以减少程序员的工作量。C+中 const用?不要一听到 const 就说是常量,这样给考官一种在和一个外行交谈的感觉。应该说 const 修饰的内容不可改变就行了, 定义常量只是一种使用

3、方式而已,还有 const 数据成员,const 参数, const 返回值, const 成员函数等, 被 const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。C 与 C+各自是如何定义常量的?不同?C 中是使用宏#define 定义, C+使用更好的 const 来定义。区别:1)const 是有数据类型的常量,而宏常量没有,编译器可以对前者进行静态类型安全检查,对后者仅是字符替换,没有类型安全检查,而且在字符替换时可能会产生意料不到的错误(边际效应)。2)有些编译器可以对 const 常量进行调试, 不能对宏调试。4. 既然 C+中有更好的 const 为什么还要

4、使用宏?const 无法代替宏作为卫哨来防止文件的重复包含。5. C+中和指针的区别?是对象的别名, 操作就是操作这个对象, 必须在创建的同时有效得初始化(一个有效的对象, 不可为 NULL), 初始化完毕就再也不可改变,上具有指针的效率, 又具有变量使用的方便性和直观性, 在语言层面和对象的用法一样, 在二进制层面上一般都是通过指针来实现的,是为了用适当的工具做恰如其只是编译器帮完成了转换。 之所以使用分的事, 体现了最小原则。6. 说一说 C 与 C+的内存分配方式?1)从静态区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,如全局变量,sic 变量。2)在栈

5、上创建。在执行函数时,函数内局部变量的单元都可以在栈上创建,函数执行结束时这些单元自动被。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。3)从堆上分配(动态内存分配)程序在运行的时候用 malloc 或 new 申请任意多少的内存,程序员负责在何时用 free 或 delete存期自己决定,使用非常灵活。内存。动态内存的生7. new/delete 与 malloc()/free() 的区别?malloc() 与 free() 是 C 语言的标准库函数, new/delete 是 C+的运算符, 他们都可以用来申请和内存, malloc()和 free()不在编译器控

6、制权限之内, 不能把构造函数和析构函数的任务强加给他们。 8. #include和#includea.h区别?答:对于#include ,编译器从标准库路径开始搜索 a.h 对于#includea.h ,编译器从用户的工作路径开始搜索 a.h9. 在 C+ 程序中调用被 C 编译器编译后的函数,为什么要加 extern C?C+语言支持函数重载,C 语言不支持函数重载。函数被 C+编译后在库中的名字与 C 语言的不同。假设某个函数的原型为: void foo(x,y);该函数被 C 编译器编译后在库中的名字为_foo, 而 C+ 编译器则会产生像_foo_之类的名字。C+提供了 C 连接交换指

7、定符号 externC来解决名字匹配问题。10. C+中的多态性? 是如何实现的?多态性是面象程序设计语言继数据抽象和继承之后的第三个基本特征。它是在运行时出现的多态性通过派生类和虚函数实现。基类和派生类中使用同样的函数名, 完成不同的操作具体实现相的另一类接口,即把 w h a t从h ow分离开来。多态性提高了代码的组织性和可读性,虚函数则根据类型的不同来进行不同的。11.动态特性?在绝大多数情况下, 程序的功能是在编译的时候就确定下来的,称之为静态特性。 反之, 如果程序的功能是在运行时刻才能确定下来的, 则称之为动态特性。C+中, 虚函数,抽象基类, 动态绑定和多态特性。了出色的动态1

8、2.封装?C+中是如何实现的?封装来源于信息隐藏的设计理念, 是通过特性和行为的组合来创建新数据类型让接口与具体实现相。C+中是通过类来实现的, 为了尽量避免某个面试题 1:变量的为变量分配地址和和定义区别空间的称为定义,不分配地址的称为。一个变量可以在多个地方,说明此变量将在文件以,但是只在一个地方定义。加入 extern 修饰的是变量的外或在文件后面部分定义。说明:很多时候一个变量,只是空间,如外部变量。不分配内存空间,直到具体使用时才初始化,分配内存链表和数组区别数组和链表有以下几点不同:(1)形式:数组是一块连续的空间,时就要确定长度。链表是一块可不连续的动态空间,长度可变,每个结点要

9、保存相邻结点指针。模块的行为干扰同一系统中的其它模块,应该让模块仅仅公开必须让外界知道的接口。RTTI?RTTI 事指运行时类型识别(Run-time type identification)在只有一个指向基类的指针或 时确定一个对象的准确类型。拷贝构造函数?它是单个参数的构造函数,其参数是与它同属一类的对象的(常) ;类定义中,如果未提供自己的拷贝构造函数,C+提供一个默认拷贝构造函数,该默认拷贝构造函数完成一个成员到一个成员的拷贝深浅拷贝?浅拷贝是创建了一个对象用一个现成的对象初始化它的时候只是 了成员(简单赋值)而没有拷贝分配给成员的资源(如给其指针变量成员分配了动态内存); 深拷贝是当

10、一个对象创建时,如果分配了资源,就需要定义自己的拷贝构造函数,使之不但拷贝成员也拷贝分配给它的资源。面象程序设计的优点?开发时间短, 效率高, 可靠性高。面 象编程的编码具有 重用性,可以在应用程序中大量采用成 类库(如 STL),从而虽短了开发时间,易于和升级。(2)数据查找:数组的线性查找速度快,查找操作直接使用偏移地址。链表需要按顺序检索结点,效率低。(3)数据或删除:链表可以快速和删除结点,而数组则可能需要大量数据移动。(4)越界问题:链表不存在越界问题,数组有越界问题。说明:在选择数组或链表数据结构时,一定要根据实际需要进行选择。数组便于查询,链表便于删除。数组节省空间但是长度固定,

11、链表虽然变长但是占了的空间。面试题 17:简述类成员函数的重写、重载和隐藏的区别重写和重载主要有以下几点不同。范围的区别:被重写的和重写的函数在两个类中,而重载和被重载的函数在同一个类中。参数的区别:被重写函数和重写函数的参数列表一定相同,而被重载函数和重载函数的参数列表一定不同。virtual 的区别:重写的基类中被重写的函数必须要有 virtual 修饰,而重载函数和被重载函数可以被7virtual 修饰,也可以没有。隐藏和重写、重载有以下几点不同。与重载的范围不同:和重写一样,隐藏函数和被隐藏函数不在同一个类中。参数的区别:隐藏函数和被隐藏的函数的参数列表可以相同,也可不同,但是函数名肯

12、定要相同。当参数不相同时,无论基类中的参数是否被 virtual 修饰,基类的函数都是被隐藏,而不是被重写。说明:虽然重载和覆盖都是实现多态的基础,但是两者实现的技术完全不相同,达到的目的也是完全不同的,覆盖是动态态绑定的多态,而重载是静态绑定的多态面试题 18:简述多态实现的原理编译器发现一个类中有虚函数,便会立即为此类生成虚函数表 vtable。虚函数表的各表项为指应虚函数的指针。编译器还会在此类中隐含一个指针 vptr(对 vc 编译器来说,它插在类的第一个位置上)指向虚函数表。调用此类的构造函数时,在类的构造函数中,编译器会隐含执行 vptr 与 vtable 的关联代码,将 vptr 指应的 vtable

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论