从今天起,豆芽有空也尽己所能,帮助一下大家。
面经来源:https://www.nowcoder.com/discuss/690834?source_id=discuss_experience_nctrack&channel=-1
1. C++三大特性
C++为了更好的实现面向对象的编程思想,于是引入了新的数据类型——类。由此衍生出三大特性:(1)封装。(2)继承。(3)多态。
封装
C++类将类中成员分为三种属性:private、protected、public
(1)私有成员(变量和函数)只限于类成员访问,由
private
限定;(2)公有成员(变量和函数)允许类成员和类外的任何访问,由
public
限定;(3)受保护成员(变量和函数)允许类成员和派生类成员访问,不允许类外的任何访问。所以
protected
对外封闭,对派生类开放。C++这样做都是有道理的,实现了很好的封装,这就是C++的第一个重要特性:封装。
继承
面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。
当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。
多态
基类指针可以按照基类的方式来做事,也可以按照派生类的方式来做事,它有多种形态,或者说有多种表现方式,我们将这种现象称为多态(Polymorphism)。多态的实现机制为虚函数。
虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类的同名函数。
方法是在基类中为同名函数添加关键字virtual
2. 多态的实现原理,虚函数是怎么实现的
多态的实现机制为虚函数。
C++实现虚函数的原理是虚函数表+虚表指针。
当一个类里存在虚函数时,编译器会为类创建一个虚函数表,虚函数表是一个数组,数组的元素存放的是类中虚函数的地址。
同时为每个类的对象添加一个隐藏成员,该隐藏成员保存了指向该虚函数表的指针。该隐藏成员占据该对象的内存布局的最前端。
所以虚函数表只有一份,而有多少个对象,就对应多少个虚函数表指针。
3. 容器用过哪些,底层是什么
vector:底层数组
list:底层链表
unordered_map:底层哈希表
map:底层红黑树
4. map的底层,存储的是什么
红黑树。
键值对。
5. tcp/ip四层协议分别是什么
6. 指针和引用的区别
(1)指针是实体,占用内存空间;引用是别名,与变量共享内存空间。
(2)指针不用初始化或初始化为NULL;引用定义时必须初始化。
(3)指针中途可以修改指向;引用不可以。
(4)指针可以为NULL;引用不能为空。
(5)sizeof(指针)计算的是指针本身的大小;而sizeof(引用)计算的是它引用的对象的大小。
(6)如果返回的是动态分配的内存或对象,必须使用指针,使用引用会产生内存泄漏。
(7)指针使用时需要解引用;引用使用时不需要解引用‘*’。
(8)有二级指针;没有二级引用。
以上所有题的答案其实都来源于我的博客面经,欢迎大家围观:https://blog.nowcoder.net/jiangwenbo