C++校招面经(二)

devtools/2024/10/19 1:29:28/
欢迎关注 0voice · GitHub
6、 C++ 和 Java 区别(语⾔特性,垃圾回收,应⽤场景等)
指针: Java 语⾔让程序员没法找到指针来直接访问内存,没有指针的概念,并有内存的⾃动管理功能,从⽽有效的
防⽌了 C++ 语⾔中的指针操作失误的影响。但并⾮ Java 中没有指针, Java 虚拟机内部中还是⽤了指针,保证了
Java 程序的安全。
多᯿继承: C++ ⽀持多᯿继承但 Java 不⽀持,但⽀持⼀个类继承多个接⼝,实现 C++ 中多᯿继承的功能,⼜避免
C++ 的多᯿继承带来的不便。
数据类型和类: Java 是完全⾯向对象的语⾔,所有的函数和变ᰁ必须是类的⼀部分。除了基本数据类型之外,其余
的都作为类对象,对象将数据和⽅法结合起来,把它们封装在类中,这样每个对象都可以实现⾃⼰的特点和⾏为。
Java 中取消了 C++ 中的 struct union
⾃动内存管理: Java 程序中所有对象都是⽤ new 操作符建⽴在内存堆栈上, Java ⾃动进⾏⽆⽤内存回收操作,不
需要程序员进⾏⼿动删除。⽽ C++ 中必须由程序员释放内存资源,增加了程序设计者的负担。 Java 中当⼀个对象
不再被⽤到时, ⽆⽤内存回收器将给他们加上标签。 Java ⾥⽆⽤内存回收程序是以线程⽅式在后台运⾏的,利⽤
空闲时间⼯作来删除。
Java 不⽀持操作符᯿载。操作符᯿载被认为是 C++ 的突出特性。
Java 不⽀持预处理功能。 C++ 在编译过程中都有⼀个预编译阶段, Java 没有预处理器,但它提供了 import C++
预处理器具有类似功能。
类型转换: C++ 中有数据类型隐含转换的机制, Java 中需要限时强制类型转换。
字符串: C++ 中字符串是以 Null 终⽌符代表字符串的结束,⽽ Java 的字符串 是⽤类对象( string
stringBuffer )来实现的。
Java 中不提供 goto 语句,虽然指定 goto 作为关键字,但不⽀持它的使⽤,使程序简洁易读。
Java 的异常机制⽤于捕获例外事件,增强系统容错能⼒。
7 、说⼀下 C++ ⾥是怎么定义常ᰁ的?常ᰁ存放在内存的哪个位置?
对于局部常ᰁ,存放在栈区;
对于全局常ᰁ,编译期⼀般不分配内存,放在符号表中以提⾼访问效率;
字⾯值常ᰁ,⽐如字符串,放在常ᰁ区。
8 C++ 中᯿载和᯿写,᯿定义的区别
᯿载
翻译⾃ overload ,是指同⼀可访问区内被声明的⼏个具有不同参数列表的同名函数,依赖于 C++ 函数名字的修饰
会将参数加在后⾯,可以是参数类型,个数,顺序的不同。根据参数列表决定调⽤哪个函数,᯿载不关⼼函数的返
回类型。
᯿写
翻译⾃ override ,派⽣类中᯿新定义⽗类中除了函数体外完全相同的虚函数,注意被᯿写的函数不能是 static 的,
⼀定要是虚函数,且其他⼀定要完全相同。要注意,᯿写和被᯿写的函数是在不同的类当中的,᯿写函数的访问修
饰符是可以不同的,尽管 virtual 中是 private 的,派⽣类中᯿写可以改为 public
᯿定义(隐藏)
派⽣类᯿新定义⽗类中相同名字的⾮ virtual 函数,参数列表
和返回类型都可以不同,即⽗类中除了定义成 virtual 且完全相同的同名函数才
不会被派⽣类中的同名函数所隐藏(᯿定义)。
9 、介绍 C++ 所有的构造函数
类的对象被创建时,编译系统为对象分配内存空间,并⾃动调⽤构造函数,由构造函数完成成员的初始化⼯作。
即构造函数的作⽤:初始化对象的数据成员。
⽆参数构造函数: 即默认构造函数,如果没有明确写出⽆参数构造函数,编译器会⾃动⽣成默认的⽆参数构造函
数,函数为空,什么也不做,如果不想使⽤⾃动⽣成的⽆参构造函数,必需要⾃⼰显示写出⼀个⽆参构造函数。
⼀般构造函数: 也称᯿载构造函数,⼀般构造函数可以有各种参数形式,⼀个类可以有多个⼀般构造函数,前提是
参数的个数或者类型不同,创建对象时根据传⼊参数不同调⽤不同的构造函数。
拷⻉构造函数: 拷⻉构造函数的函数参数为对象本身的引⽤,⽤于根据⼀个已存在的对象复制出⼀个新的该类的对
象,⼀般在函数中会将已存在的对象的数据成员的值⼀⼀复制到新创建的对象中。如果没有显示的写拷⻉构造函
数,则系统会默认创建⼀个拷⻉构造函数,但当类中有指针成员时,最好不要使⽤编译器提供的默认的拷⻉构造函
数,最好⾃⼰定义并且在函数中执⾏深拷⻉。 类型转换构造函数: 根据⼀个指定类型的对象创建⼀个本类的对象,也可以算是⼀般构造函数的⼀种,这⾥提出
来,是想说有的时候不允许默认转换的话,要记得将其声明为 explict 的,来阻⽌⼀些隐式转换的发⽣。
赋值运算符的᯿载 :注意,这个类似拷⻉构造函数,将=右边的本类对象的值复制给=左边的对象,它不属于构造
函数,=左右两边的对象必需已经被创建。如果没有显示的写赋值运算符的᯿载,系统也会⽣成默认的赋值运算
符,做⼀些基本的拷⻉⼯作。
10 C++ 的四种强制转换
C++ 的四种强制转换包括: static_cast, dynamic_cast, const_cast, reinterpret_cast
static_cast :明确指出类型转换,⼀般建议将隐式转换都替换成显示转换,因为没有动态类型检查,上⾏转换
(派⽣类 -> 基类)安全,下⾏转换(基类 -> 派⽣类) 不安全,所以主要执⾏⾮多态的转换操作;
dynamic_cast :专⻔⽤于派⽣类之间的转换, type-id 必须是类指针,类引⽤或 void* ,对于下⾏转换是安全
的,当类型不⼀致时,转换过来的是空指针,⽽ static_cast ,当类型不⼀致时,转换过来的事错误意义的指
针,可能造成⾮法访问等问题。
const_cast :专⻔⽤于 const 属性的转换,去除 const 性质,或增加 const 性质, 是四个转换符中唯⼀⼀个
可以操作常ᰁ的转换符。
reinterpret_cast :不到万不得已,不要使⽤这个转换符,⾼危操作。使⽤特点: 从底层对数据进⾏᯿新解
释,依赖具体的平台,可移植性差; 可以将整形转 换为指针,也可以把指针转换为数组;可以在指针和引⽤
之间进⾏肆⽆忌惮的转换。

http://www.ppmy.cn/devtools/115256.html

相关文章

ubuntu 22.04 ~24.04 如何修改登录背景

ubuntu 22.04 ~24.04 如何修改登录背景 背景:由于22.04 登录gdm的变更,之前的修改登录背景的方案已经无法使用。现在给大家分享新的使用方法: 1,下载如下路径的脚本: https://download.csdn.net/download/xdhyqd/89…

2024年华为杯数学建模研赛(F题) 建模解析| 卫星轨道 | 小鹿学长带队指引全代码文章与思路

我是鹿鹿学长,就读于上海交通大学,截至目前已经帮2000人完成了建模与思路的构建的处理了~ 本篇文章是鹿鹿学长经过深度思考,独辟蹊径,实现综合建模。独创复杂系统视角,帮助你解决研赛的难关呀。 完整内容可…

CertiK协助修复Solana大整数模幂运算中的DOS漏洞

导读: 本文深入探讨了区块链交易费⽤模型的重要性及其在确保网络安全和有效运行中的关键作用。通过对以太坊和Solana区块链网络的交易费⽤模型进行比较分析,揭示了不安全的交易计费可能引发的网络安全风险。特别关注了CertiK团队发现并协助修复的Solana…

设计模式-行为型模式-命令模式

1.命令模式的定义 命令模式将请求封装为一个对象,这样可以使用不同的请求参数化其他对象(将不同请求依赖注入到其他对象),并且能够支持请求的排队执行、记录日志、撤销等功能; 1.1 命令模式优缺点 优点 降低系统的耦…

小程序——生命周期

文章目录 运行机制更新机制生命周期介绍应用级别生命周期页面级别生命周期组件生命周期生命周期两个细节补充说明总结 运行机制 用一张图简要概述一下小程序的运行机制 冷启动与热启动: 小程序启动可以分为两种情况,一种是冷启动,一种是热…

运维工程师面试整理-沟通能力

在运维工程师的面试中,沟通能力是一个关键的软技能。虽然运维工程师的工作主要集中在技术领域,但良好的沟通能力能够帮助你更有效地与团队成员、其他技术部门和非技术人员协作。以下是关于运维工程师需要具备的沟通能力的详细内容,帮助你更好地准备面试。 1. 沟通能力的重要…

力扣150题——位运算

位运算概述 位运算(Bitwise Operation)是计算机底层操作中的一种,用来直接对整数的二进制位进行操作。位运算通常速度很快,且消耗的内存较少,在处理一些特定问题(如加密算法、图像处理、低级硬件编程等&…

华为全联接大会HUAWEI Connect 2024印象(二):昇腾AI端侧推理

此次参加HUAWEI Connect 2024最主要目标是了解昇腾AI端侧推理技术,希望将其融合到我现在嵌入式系统课程中,不过刚开始在一楼找到一个小展台,看到了香橙派Orange Pi。香橙派是深圳迅龙的一个品牌,他们和很多芯片厂商都合作过&#…