• C++ 常见面试题精选


    C++ 常见面试题精选

    1.定义和声明的区别?

    定义:为变量分配地址和存储空间,只能在一个地方声明。
    声明:不分配地址,使用extern修饰,可以声明多次。

    2.sizeof和strlen的区别?

    sizeof是操作符,参数可以是数据类型,也可以是变量,在编译时就计算出来了,计算数据类型占用内存大小。
    strlen是库函数,参数只能是字符串,运行时才能算出来,字符串实际长度。

    3.C 语言的关键字 static 和 C++ 的关键字 static 有什么区别?

    C语言中static用来修饰局部静态变量和外部静态变量,函数。
    C++中除上述功能外,还能用来定义类的成员变量和函数,即静态成员变量和静态成员函数。

    4.面对对象的三大特征?

    封装:将数据和操作数据的方法实现封装隐藏,对外使用提供公共接口去调用对象。
    继承:子类继承父类的属性和方法,使得子类对象拥有父类的属性和方法,子类可以创建新的属性和方法。
    多态:同一个方法用于不同的对象调用产生不同的行为。

    5.C++如何实现多态?

    函数重载,函数模板,虚函数
    函数重载:在同一作用域内,可以声明几个功能类似的同名函数,但是其中参数的类型,个数,顺序,返回值不同。
    virtual关键字修饰基类的成员函数,派生类重写此函数。虚函数的实现原理,当类初始化后,存在一个指针,指向一张表,表中存的时候虚函数的地址。子类继承了父类,重写了父类的虚函数后,表中的地址会替换成子类的重写后函数的地址,即虚表指针指向子类的虚表。

    6.指针和引用的区别?

    引用是一个变量的别名,不需要内存空间。指针初始化必须分配空间。引用不能被改变,指针可以改变多次。引用不能为空,指针可以为空。引用后不需要解引用,指针需要释放内存空间。

    7.const关键字?

    const用来定义一个只读的变量或者对象。在一定程度上可以提高程序的安全性和可靠性。

    8.c++中四种智能指针

    unique_ptr,拥有对对象的独有权,两个指针不能指向同一个对象,该对象被销毁时,会在其析构函数中删除关联的原始指针。
    shared_ptr,使用引用计数实现对同一块内存的多个引用。在最后一个引用被释放时,指向的内存才释放

    9.STL中各个容器的介绍

    vector:动态数组,在内存中拥有一串连续的地址空间,在中间插入和删除元素效率低,时间复杂度为o(n)
    list:双向链表,内存空间可以是不连续的,通过指针来进行数据访问,在任何地方插入删除效率高。

    10.析构函数为什么要设为虚函数?

    无法释放子类对象,导致内存泄露。

    11.指针常量和常量指针的区别?

    指针常量,指针存储的值只能在定义的时候初始化,其他地方不可以改变,强调指针的不可变性。
    常量指针,指针指向一个可读对象,不可以通过常量指针来改变,强调所指对象的不可以变性。

    12.红黑树的特性

    每个节点都是红色或者黑色
    跟节点是黑色
    每个叶子结点是黑色
    如果一个叶子结点是红色,那么他的儿子均是黑色

    13.C 语言和 C++ 中 molloc /free和 new /delete的区别?

    共同点是:
    都是从堆上申请空间,并且需要用户手动释放。

    不同的地方是:

    1. malloc和free是函数,new和delete是操作符。
    2. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理。
  • 相关阅读:
    Jmeter测试计划
    java生成excel公共方法
    解决方案 | 法大大电子签助力融资租赁突围数字化
    深入理解Linux网络笔记(四):内核是如何发送网络包的
    基于Java+Vue+uniapp微信小程序实现餐厅校园订餐平台
    QCustomPlot保存图片
    力扣 215. 数组中的第K个最大元素
    Socket通信
    D-Bus:busctl的使用
    SpringBoot整合RabbitMQ学习笔记
  • 原文地址:https://blog.csdn.net/qq_50840738/article/details/126069955