c++八股7

  1. C和C++的区别:
    ○ C语言是一种结构化编程语言,它提供基本的数据类型、函数、控制结构以及指针操作。C语言没有内建的面向对象支持,也没有模板、异常处理机制等现代特性。
    ○ **C++**是在C语言基础上发展起来的,它既包含了C语言的所有特性,又引入了类、对象、继承、多态、模板、命名空间、异常处理等面向对象和泛型编程特性。此外,C++还支持STL(Standard Template Library)这样的强大库,增强了内存管理能力,并提供了更丰富的数据抽象和封装手段。
  2. struct和class的区别(在C++中):
    ○ 在C++中,struct和class在本质上非常相似,都可以定义成员变量和成员函数,可以派生出子类,也可以实现多态。
    ○ 默认访问权限不同:struct默认成员访问权限为public,而class默认为private。
    ○ 习惯用法上,struct通常用于表示数据结构,强调的是数据的集合;而class常用于描述具有行为的对象,侧重于封装和数据隐藏。
  3. C++的三大特性:
    ○ 封装(Encapsulation):通过类(class)将数据和操作这些数据的函数结合在一起,对外只暴露必要的接口,隐藏内部实现细节,以保证数据安全性和代码模块化。
    ○ 继承(Inheritance):一个类可以从已有的类(基类)派生出新的类(派生类),派生类自动拥有基类的非私有成员(属性和方法),并能够添加新的成员或重写基类的方法。
    ○ 多态(Polymorphism):允许同名的不同函数(静态多态/编译时多态如函数重载)或同一消息被不同的对象接收后产生不同的响应(动态多态/运行时多态如虚函数)。
  4. 多态:
    ○ 静态多态(Static Polymorphism):也称为早期绑定或编译时多态,主要是通过函数重载(Overloading)实现的,即在同一作用域内,函数名相同但参数列表不同,编译器根据传入参数的类型来决定调用哪个函数。
    ○ 动态多态(Dynamic Polymorphism):也称为晚期绑定或运行时多态,主要通过虚函数(Virtual Functions)和纯虚函数(Pure Virtual Functions)实现,派生类可以覆盖基类中的虚函数,当基类指针指向派生类实例时,通过该指针调用虚函数会根据实际对象类型调用相应的函数。
  5. 虚函数实现与函数重载实现的区别:
    ○ 虚函数是通过在基类中声明函数为virtual,并在派生类中重新定义实现多态性。运行时系统根据对象的实际类型而非引用或指针的类型确定调用哪个版本的函数。
    ○ 函数重载则是在同一个作用域内定义多个同名函数,但它们的参数列表(包括参数个数、类型或顺序)不同,编译器在编译期间就能根据传入参数的类型和数量判断要调用的具体函数。
  6. 哪些函数不能是虚函数:
    ○ 构造函数不能为虚函数,因为创建对象时首先需要知道确切的类型以便调用正确的构造函数初始化对象。
    ○ 静态成员函数由于不与类实例关联,而是与类本身相关联,所以也不能声明为虚函数。
  7. inline能不能是虚函数:
    ○ inline函数是为了提高程序执行效率,建议编译器进行内联展开优化,而虚函数是为了实现动态多态,其调用地址必须在运行时确定。因此,虚函数不能同时声明为inline,即使加上inline关键字也不会被编译器当作内联函数处理。
  8. inline和#define的区别:
    ○ inline关键字用于建议编译器对函数进行内联展开,以消除函数调用开销,提升性能,但它依赖于编译器是否采纳这个建议,且编译器有权根据情况选择是否内联。
    ○ #define预处理器指令则是文本替换,在编译之前进行简单的字符串替换操作,无类型检查,无作用域限制,可能导致副作用和二义性问题。
  9. 引用和指针的区别:
    ○ 引用一旦初始化后就无法改变引用的对象,总是指向最初绑定的对象;而指针可以更改所指向的对象。
    ○ 引用必须在定义时初始化;指针可以在任何时候初始化。
    ○ 引用没有NULL状态,始终代表某个对象;指针可以为NULL,表示未指向任何对象。
    ○ 语法上的差异,引用使用类似变量的方式直接访问对象;指针需要解引用(*)才能访问对象.

你可能感兴趣的:(八股八股八股文,c++)