中望c++秋招面经一面+二面(已oc)

中望武汉(一面)

自我介绍

说了很多然后。。

微型操作系统实现了哪些功能

MBR、bootloader、进入保护模式、内存分页、内核线程、用户进程、锁、输入输出、文件系统、简单的系统交互;
拓展(MBR和bootloader的功能):
MBR:读取硬盘信息、检测硬盘状态
bootloader:设置分段,进入保护模式,进入内核态
https://blog.csdn.net/weixin_51431342/article/details/125644696

封装、继承、多态
  1. 继承
    定义:
    让某种类型对象获得另⼀个类型对象的属性和⽅法
    功能:
    它可以使⽤现有类的所有功能,并在⽆需重新编写原来的类的情况下对这些功能进⾏扩展
    常见的继承有三种⽅式:
    1、实现继承:指使⽤基类的属性和⽅法⽽⽆需额外编码的能⼒
    2、接口继承:指仅使⽤属性和⽅法的名称、但是⼦类必须提供实现的能⼒
    3、可视继承:指⼦窗体(类)使⽤基窗体(类)的外观和实现代码的能⼒
    例如:
    将⼈定义为⼀个抽象类,拥有姓名、性别、年龄等公共属性,吃饭、睡觉等公共⽅法,在定
    义⼀个具体的⼈时,就可以继承这个抽象类,既保留了公共属性和⽅法,也可以在此基础上
    扩展跳舞、唱歌等特有⽅法。
  2. 封装
    定义:
    数据和代码捆绑在⼀起,避免外界⼲扰和不确定性访问;
    功能:
    把客观事物封装成抽象的类,并且类可以把⾃⼰的数据和⽅法只让可信的类或者对象操作,
    对不可信的进⾏信息隐藏,例如:将公共的数据或⽅法使⽤public修饰,⽽不希望被访问的
    数据或⽅法采⽤private修饰。
  3. 多态
    定义:
    同⼀事物表现出不同事物的能⼒,即向不同对象发送同⼀消息,不同的对象在接收时会产⽣
    不同的⾏为(重载实现编译时多态,虚函数实现运⾏时多态)
    功能:
    多态性是允许你将⽗对象设置成为和⼀个或更多的他的⼦对象相等的技术,赋值之后,⽗对
    象就可以根据当前赋值给它的⼦对象的特性以不同的⽅式运作;
    简单⼀句话:允许将⼦类类型的指针赋值给⽗类类型的指针。
    实现多态有两种⽅式
  4. 覆盖(override): 是指⼦类重新定义⽗类的虚函数的做法
  5. 重载(overload): 是指允许存在多个同名函数,⽽这些函数的参数表不同(或
    许参数个数不同,或许参数类型不同,或许两者都不同)
    例如:
    基类是⼀个抽象对象——⼈,那学⽣、运动员也是⼈,⽽使⽤这个抽象对象既可以表⽰学
    ⽣、也可以表⽰运动员。
c和c++面向对象的区别

struct,c几乎没有权限的概念
c其实是面向过程的,c++是面向对象的
c和c++的区别:
(1)C是面向过程的语言,是一个结构化的语言,考虑如何通过一个过程对输入进行处理得到输出;
C++是面向对象的语言,主要特征是“封装、继承和多态”。封装隐藏了实现细节,使得代码模块化;
派生类可以继承父类的数据和方法,扩展了已经存在的模块,实现了代码重用;
多态则是“一个接口,多种实现”,通过派生类重写父类的虚函数,实现了接口的重用。
(2)C和C++动态管理内存的方法不一样,C是使用malloc/free,而C++除此之外还有new/delete运算符;
(3)C++支持函数重载,C不支持函数重载;
(4)C++中有引用,C中不存在引用的概念。
原文链接:https://blog.csdn.net/zaishuiyifangxym/article/details/87939703

多态是怎么实现的

虚函数的实现:在有虚函数的类中,类的最开始部分是一个虚函数表的指针,这个指针指向一个虚函数表,表中放了虚函数的地址,实际的虚函数在代码段(.text)中。当子类继承了父类的时候也会继承其虚函数表,当子类重写父类中虚函数的时候,会将其继承到的虚函数表中的地址替换为重新写的函数地址。使用了虚函数,会增加访问内存开销,降低效率。【虚函数表是每个对象实例共享的,虚函数指针是每个对象实例都有一个。】
原文链接:https://blog.csdn.net/qq_46111138/article/details/125216386https://blog.csdn.net/qq_36359022/article/details/81870219

静态多态是怎么实现的

https://blog.csdn.net/weixin_45707610/article/details/127105179

c语言为什么没有重载?

https://blog.csdn.net/weixin_57761086/article/details/126403931

const的应用场景

const的作⽤:
被它修饰的值不能改变,是只读变量。必须在定义的时候就给它赋初值。
1、常量指针(底层const )
常量指针:
是指定义了⼀个指针,这个指针指向⼀个只读的对象,不能通过常量指针来改变这个对象的
值。常量指针强调的是指针对其所指对象的不可改变性。
特点:
靠近变量名。
形式:
(1)const 数据类型 *指针变量 = 变量名
(2)数据类型 const *指针变量 = 变量名
⽰例:

int temp = 10;
const int* a = &temp;
int const *a = &temp;
// 更改:
*a = 9; // 错误:只读对象
temp = 9; // 正确

2、指针常量(顶层const)
指针常量:
指针常量是指定义了⼀个指针,这个指针的值只能在定义时初始化,其他地⽅不能改变。指
针常量强调的是指针的不可改变性。
特点:
靠近变量类型。
形式:
数据类型 * const 指针变量=变量名
⽰例:

int temp = 10;
int temp1 = 12;
int* const p = &temp;
// 更改:
p = &temp2; // 错误
*p = 9; // 正确
析构函数为什么一定要定义为虚函数
顺序容器和关联容器的区别

①顺序容器只有实值val。
②关联容器的一个元素包含两个部分:键值对(key-value) 即<k值(键值)|实值>。
③顺序容器不涉及排序,关联容器内部自动排序。
④本质区别:顺序容器通过元素在容器中的位置顺序存储和访问元素,而关联容器则是通过键(key)存储和读取元素的。
原文链接:https://blog.csdn.net/weixin_43691058/article/details/88556471

层序遍历
哈希表解决冲突

开放定址法:线性探测法、平方探测法
再哈希法
链地址法
建立公共溢出区

中望二面

静态多态和动态多态的实现

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

  • 函数重载:包括普通函数的重载和成员函数的重载
  • 函数模板的使用

动态多态
动态多态(动态绑定):即运行时的多态,在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际类型调用相应的方法。
原文链接:https://blog.csdn.net/qq_37934101/article/details/81365449

哈希表和红黑树是哪些STL库的底层,有哪些区别?

如果只是查找哈希表还好,但是如果要搜索,插入,删除,范围查询这种场景,红黑树会好很多
https://zhuanlan.zhihu.com/p/535428994

哈希表和红黑树哪个对内存占用小?

红黑树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值