【C++】42道面试经典问题总结

  1. C++ this指针是干什么用的?
    假如一个类型定义了很多对象,类里面有很多定义的私有成员变量,共享一套成员方法。通过this指针这可以区分方法、变量是操作的哪个对象的。

  2. C++的new和delete,new[]和delete[]可以混用吗?
    一般来说operator new 对应 operator delete
    new[] 对应 delete[]ptr ,对于内置类型四者相互混用也行。
    但是,如果是自定义类型。而且提供了析构函数,那么用new[] 就一定要用delete[]ptr,不能够混用。
    delete相对于free,1.调用析构函数2.释放内存

  3. C++的static关键字的作用?
    从面向过程角度来说:static可以修饰全局变量,函数,局部变量。
    对于static修饰全局变量,函数,添加static关键字后变成只当前文件可见,原因:再符号表中符号的作用域就从global变成了local)
    对于static修饰局部变量-变量初始化并且初始化不为0的放在了.data段,没有初始化或者初始化为0的放在了.bss端(局部变量不产生符号,在栈上通过ebp-偏移量来访问的)
    从面向对象角度来说:static可以修饰成员变量,成员方法(从私有变成共享)修饰成员方法时不会再生成this指针了,直接通过类作用域调用即可。

  4. C++的继承有什么好处?
    继承属于类和类之间的关系(除了继承还有组合)
    继承是 a kind of关系 一种
    组合是 a part of关系 一部分
    继承好处:
    代码复用
    通过继承,在基类里面给所有派生类可以保留统一的纯虚函数接口,等待派生类进行重写,通过使用多态,可以通过基类指针访问不同派生类对象的同名覆盖方法(做到开闭原则)

  5. 讲一下C++ 的继承多态
    多态:静态多态和动态多态,静态多态是指编译时期的多态,比如函数重载和模板
    动态多态是指运行时期的多态,比如虚函数和通过基类指针/引用指向派生类对象

  6. C++ 空间配置器是什么?
    空间配置器allocator:给容器使用的,主要作用就是把内存开辟与对象构造分开,把对象析构和内存释放分离开。
    分开原因:当我们去初始化一个容器时,底层应该是空的,只有内存,没有对象,但是如 果在容器构造时直接用new,不仅会开辟内存还会构造很多无用的对象 。当容器删除一个元素时不应该进行内存释放(后面可能会继续使用),只用把对象析构掉即可。

  7. vector和list的区别?
    vector底层数据结构是数组,list底层数据结构是链表。
    vector底层内存可以做二倍扩容的数组(内存是连续的),提供了尾部的增加删除操作,时间复杂度都是O(1),适合做随机访问时间复杂度是O(1)(优先级队列是基于vector实现)
    list是一个循环的双向链表,适合增加、删除节点,时间复杂度都是O(1)。

  8. map和多重map?
    map:映射表【key-value】底层是由红黑树实现
    multimap:唯一一点不同之处就是允许key重复
    红黑树:5个性质(每个节点都要有颜色,根节点必须为黑色,叶子节点必须是黑色,从根节点到每一个叶子节点的路径上,不能出现连续的红色节点,不允许出现两个连续的红色节点)插入的3种方式(最多旋转2次),删除的4种情况(最多旋转3次)

  9. C++如何防止内存泄漏?智能指针详述?
    内存泄漏:分配到堆内存(没有名字,只能用指针来指向)没有释放,也再没有机会去释放了
    智能指针有:
    auto_ptr/scoped_ptr/unique_ptr
    shared_ptr和weak_ptr
    (待补充)

  10. C++如何调用C语言语句?
    C和C++生成符号的方式不同,C和C++语言之间的API接口是无法直接调用的
    C语言的函数必须扩在extern"C"{}

#ifdef __cplusplus
extern "c"
{
   
   
#endif
  int sum(int,int); //在C语言下只会根据函数名生成符号,在C++下会根据函数名+参数列表生成符号
#ifdef __cplusplus
}
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洁洁!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值