分享面试官常用16个c/c++面试题

 更新时间:2022年01月06日 11:49:10   作者:廖先生  
这篇文章主要分享的是面试官常用的16个c/c++面试题, C中static有什么作用、C++中const有什么用?C与C++各自是如何定义常量的?有什么不同?等等问题,具有一定的参考资料,需要的小伙伴可以参考一下

1. C中static有什么作用

(1)隐藏。 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性,故使用static在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。  

(2)static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量。  

(3)static的第三个作用是默认初始化为0.其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0×00,某些时候这一特点可以减少程序员的工作量。

2.C++中const有什么用?

不要一听到const就说是常量,这样给考官一种在和一个外行交谈的感觉。应该说const修饰的内容不可改变就行了, 定义常量只是一种使用方式而已,还有const数据成员,const参数, const返回值, const成员函数等, 被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

3. C与C++各自是如何定义常量的?有什么不同?

C中是使用宏#define定义, C++使用更好的const来定义。区别: 

1)const是有数据类型的常量,而宏常量没有,编译器可以对前者进行静态类型安全检查,对后者仅是字符替换,没有类型安全检查,而且在字符替换时可能会产生意料不到的错误(边际效应)。 

2)有些编译器可以对const常量进行调试, 不能对宏调试。

4. 既然C++中有更好的const为什么还要使用宏?

const无法代替宏作为卫哨来防止文件的重复包含。

5. C++中引用和指针的区别?

引用是对象的别名, 操作引用就是操作这个对象, 必须在创建的同时有效得初始化(引用一个有效的对象, 不可为NULL), 初始化完毕就再也不可改变, 引用具有指针的效率, 又具有变量使用的方便性和直观性, 在语言层面上引用和对象的用法一样, 在二进制层面上引用一般都是通过指针来实现的, 只是编译器帮我们完成了转换。 之所以使用引用是为了用适当的工具做恰如其分的事, 体现了最小特权原则。

6. 说一说C与C++的内存分配方式?

1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,如全局变量,static变量。 

2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

3)从堆上分配(动态内存分配)程序在运行的时候用malloc或new申请任意多少的内存,程序员负责在何时用free或delete释放内存。动态内存的生存期自己决定,使用非常灵活。

7. new/delete 与 malloc()/free() 的区别?

malloc()free() 是C语言的标准库函数,new/delete 是C++的运算符, 他们都可以用来申请和释放内存,malloc()free()不在编译器控制权限之内, 不能把构造函数和析构函数的任务强加给他们。

8. #include<a.h>和#include"a.h" 有什么区别?

答:对于#include ,编译器从标准库路径开始搜索 a.h对于#include "a.h" ,编译器从用户的工作路径开始搜索 a.h

9. 在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern "C"?

C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为:void foo(int x, int y);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。C++提供了C连接交换指定符号extern"C"来解决名字匹配问题。

10. C++中的什么是多态性?是如何实现的? 

多态性是面向对象程序设计语言继数据抽象和继承之后的第三个基本特征。它是在运行时出现的多态性通过派生类和虚函数实现。基类和派生类中使用同样的函数名, 完成不同的操作具体实现相隔离的另一类接口,即把" w h a t"从"h o w"分离开来。多态性提高了代码的组织性和可读性,虚函数则根据类型的不同来进行不同的隔离。

11. 什么是动态特性?

在绝大多数情况下, 程序的功能是在编译的时候就确定下来的, 我们称之为静态特性。 反之, 如果程序的功能是在运行时刻才能确定下来的, 则称之为动态特性。C++中, 虚函数,抽象基类, 动态绑定和多态构成了出色的动态特性。

12.什么是封装?C++中是如何实现的?

封装来源于信息隐藏的设计理念, 是通过特性和行为的组合来创建新数据类型让接口与具体实现相隔离。C++中是通过类来实现的, 为了尽量避免某个模块的行为干扰同一系统中的其它模块,应该让模块仅仅公开必须让外界知道的接口。

13. 什么是RTTI?

RTTI事指运行时类型识别(Run-time type identification)在只有一个指向基类的指针或引用时确定一个对象的准确类型。

14. 什么是拷贝构造函数?

它是单个参数的构造函数,其参数是与它同属一类的对象的(常)引用;类定义中,如果未提供自己的拷贝构造函数,C++提供一个默认拷贝构造函数,该默认拷贝构造函数完成一个成员到一个成员的拷贝

15. 什么是深浅拷贝?

浅拷贝是创建了一个对象用一个现成的对象初始化它的时候只是复制了成员(简单赋值)而没有拷贝分配给成员的资源(如给其指针变量成员分配了动态内存); 深拷贝是当一个对象创建时,如果分配了资源,就需要定义自己的拷贝构造函数,使之不但拷贝成员也拷贝分配给它的资源。

16.面向对象程序设计的优点?

开发时间短, 效率高, 可靠性高。面向对象编程的编码具有高可重用性,可以在应用程序中大量采用成熟的类库(如STL),从而虽短了开发时间,软件易于维护和升级。

到此这篇关于面试官常用的16个c/c++面试题的文章就介绍到这了,更多相关16个常用的c/c++面试题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析C++11新特性的Lambda表达式

    浅析C++11新特性的Lambda表达式

    C++11 新增了很多特性,lambda 表达式是其中之一,本文涉及到C++11这次更新中较为重要的lambda表达式。有需要的朋友们可以参考学习。
    2016-08-08
  • MATLAB算法技巧和实现斐波那契数列的解决思路

    MATLAB算法技巧和实现斐波那契数列的解决思路

    这篇文章主要介绍了MATLAB算法技巧和实现斐波那契数列,这篇主要说一下自己在算法设计课上用matlab做的两道算法题,题目解起来都比较简单,但是需要些技巧,需要的朋友可以参考下
    2022-12-12
  • C语言实现单链表的基本功能详解

    C语言实现单链表的基本功能详解

    链表是一个结构体实现的一种线性表,它只能从前往后,不可以从后往前,在实现单链表的操作时,需要用指针来操作。本文主要介绍了实现单链表的基本功能的代码示例,具有一定价值,感兴趣的同学可以学习一下
    2021-11-11
  • Java C++ leetcode面试零矩阵

    Java C++ leetcode面试零矩阵

    这篇文章主要为大家介绍了Java C++题解leetcode面试零矩阵示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • C++的try块与异常处理及调试技术实例解析

    C++的try块与异常处理及调试技术实例解析

    这篇文章主要介绍了C++的try块与异常处理及调试技术实例解析,有助于读者加深对try块调试技术的认识,需要的朋友可以参考下
    2014-07-07
  • 一文带你学习一下C++中的构造函数

    一文带你学习一下C++中的构造函数

    构造函数是一种特殊的函数,它用于在创建对象时初始化对象的值。在本文中,我们将学习C++的构造函数以及如何使用它们来创建对象,希望对大家有所帮助
    2023-05-05
  • C++实现LeetCode(90.子集合之二)

    C++实现LeetCode(90.子集合之二)

    这篇文章主要介绍了C++实现LeetCode(90.子集合之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 对C语言中sizeof细节的三点分析介绍

    对C语言中sizeof细节的三点分析介绍

    以下是对C语言中sizeof的细节进行了详细的分析介绍,需要的朋友可以参考下
    2013-07-07
  • C++实现将数据写入Excel工作表的示例代码

    C++实现将数据写入Excel工作表的示例代码

    直观的界面、出色的计算功能和图表工具,使Excel成为最流行的个人计算机数据处理软件。在本文中,您将学习如何使用 Spire.XLS for C++ 创建 Excel 文档,以及如何将数据写入 Excel 工作表
    2023-03-03
  • C语言学生学籍管理系统课程设计

    C语言学生学籍管理系统课程设计

    这篇文章主要介绍了C语言学生学籍管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01

最新评论