秋招C++八股--封装、继承、多态(持续更新)

秋招C++八股--封装、继承、多态(持续更新)
最新回答
世界等同你

2021-10-21 18:19:16

C++中的封装、继承、多态相关概念

封装 定义:封装是面向对象编程中的一种基本思想,即将数据和操作数据的方法绑定在一起,形成一个不可分割的独立单位。在C++中,封装通常通过class或struct实现。 class与struct的区别:默认情况下,class的成员为私有,而struct的成员为公有。class更适合用于封装和数据隐藏,而struct则更偏向于数据结构的定义。

继承 定义:继承是面向对象编程中实现代码复用的一种机制,允许一个类继承另一个类的成员变量和成员函数。 访问权限:继承时,基类的成员变量和成员函数在子类中的访问权限受继承方式的影响。 菱形继承与虚拟继承:菱形继承可能导致二义性问题,通过虚拟继承可以解决这一问题,确保共享的虚基类在子类中只有一份实例。

多态 定义:多态允许以统一的接口处理不同类型的对象,实现动态绑定和动态选择相应的操作。 实现方式静态多态:通过函数重载和运算符重载实现,编译时确定调用哪个函数。 动态多态:通过继承和虚函数实现,运行时根据对象的实际类型确定调用哪个函数。 虚函数表和虚表指针:C++通过虚函数表实现动态多态,每个类有一个虚函数表,存储虚函数的地址。对象中有一个虚表指针,指向所属类的虚函数表。子类重写虚函数时,会替换基类虚函数在虚函数表中的入口地址。 纯虚函数:没有实现的虚函数,目的是让派生类必须重写,从而实现抽象类。

其他相关概念 浅拷贝与深拷贝:浅拷贝只拷贝对象的指针,未开辟新的内存空间;深拷贝不仅拷贝对象的值,还开辟新的内存空间,确保拷贝后的对象与原始对象相互独立。 类型安全:C++通过编译器检查和虚函数等机制实现类型安全,防止程序访问未经授权的内存区域。

注意:构造函数、内联函数、静态函数、友元函数和普通函数不能是虚函数,因为它们不符合虚函数的特性或语法要求。