ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++语言面试八股文

2022-07-14 10:01:19  阅读:260  来源: 互联网

标签:可执行文件 八股文 函数 编译 成员 多态 C++ 面试 hello


1.结构体struct和共同体union的区别
  • 是C++中一种用户自定义的数据类型,可以被用来存储不同类型的数据项。结构体的定义使用struct关键字,结构体的访问采用成员访问运算符(.)。
  • 共同体是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型。即我们可以定义一个带有多个成员的共同体,但是任何时候只能有一个成员带有值。 共同体可以使用union定义,定义方式类似于结构体。

  区别:

  • 结构体的每个成员都有自己的独立地址,它们可以同时存在;而共同体中的所有成员占用同一段内存,它们不能同时存在。
  • sizeof(struct)是内存对齐后所有成员长度的和;sizeof(union)是内存对齐后最长数据成员的长度。

2.程序的执行过程

  • 预处理:根据以字符#开头的命令修改原始的c程序,比如#include<stdio.h>告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中,将#define的变量替换等等,结果得到了另一个c程序,通常以.i作为文件扩展名。
  • 编译:文本文件hello.i翻译成hello.s,它包含了一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式确切的描述一条低级机器语言指令。
  • 汇编:将汇编程序翻译为机器语言指令,把这些指令打包成可重定位目标程序(relocateble object program)的格式,并把结果保存在hello.o中。hello.o文件是二进制文件,因为他的字节编码是机器语言指令而不是ascii码。如果用文本编辑器打开hello.o会看到一堆乱码。
  • 链接:比如hello中用到了printf函数,这是标准c库的函数,存在于一个名为printf.o的单独编译好的目标文件中,这个文件必须以某种方式合并到我们编译好的的目标文件中。链接器(ld)程序负责处理这种合并,结果得到hello文件,它是可执行目标文件,可以被加载到内存中,由系统执行。

3.静态编译和动态编译

  • 动态编译的可执行文件需要附带一个的 动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了 系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的 运行库,则用动态编译的可执行文件就不能运行。
  • 静态编译就是 编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。所以其优缺点与动态编译的可执行文件正好互补。

4.c++特性

  • 封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 类将成员变量和成员函数封装在类的内部,根据需要设置访问权限,通过成员函数管理内部状态、
  • 继承:继承所表达的是类之间相关的关系,这种关系使得对象可以继承另外一类对象的特征和能力。 继承的作用:避免公用代码的重复开发,减少代码和数据冗余。
  • 多态:多态性可以简单地概括为“一个接口,多种方法”,字面意思为多种形态。程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。比如函数重载、运算符重载、虚函数等

5.静态多态和动态多态

  • 静态多态:也称为编译期间的多态,在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。
    静态多态有两种实现方式:

    • 函数重载:包括普通函数的重载和成员函数的重载
    • 函数模板的使用
  • 动态多态:即运行时的多态,在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际类型调用相应的方法。

 

 

标签:可执行文件,八股文,函数,编译,成员,多态,C++,面试,hello
来源: https://www.cnblogs.com/4jiu/p/16476530.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有