C++研发106面试题总结(二)

C++研发106面试题总结(二)

                    --C++实现细节

linux内部提供了那些调试宏?

  __FILE__:表示在哪个文件 

  __LINE__:表示在当前多少行 

  __FUNCTION__:表示在执行在哪个函数 

手写线程安全的单例模式?

https://ask.qcloudimg.com/http-save/yehe-1681754/gvmdc77511.png?imageView2/2/w/1620

 

引用和指针的区别?

  指针:是一个变量类型;指针可以不进行初始化;指针初始化后可以改变,在写代码时需要大量的检测 

  引用:是一个别名;引用必须要初始化;引用初始化后不可改变,无需检测 

出现异常时,try和catch做了什么?

  Catch(Ep a)发生异常-》建立一个异常对象-》拷贝一个异常对象-》catch处理 

  Catch(Ep &a)发生异常-》建立一个异常对象-》引用异常对象-》catch处理 

  异常对象通常建立在全局或者堆中【需要在函数外进行捕捉】 

  Catch捕捉异常的转换:异常处理时,如果用基类的处理派生类的对象会导致派生类完全当做基类来使用,即便有虚函数也没用,所以派生类必须放在基类前处理。 

C++如何处理多个异常的?

  多次catch处理 

常对象的成员变量一定不可以修改吗?为什么?

  可以修改,用mutable来修饰,可以突破const的限制。 

虚函数的调用过程?

  找到对象内存中vfptr所指向虚函数表的地址-》找到虚函数表相应的虚函数地址 

汇编层面:

  Mov ecx, dword ptr[ebp-0ch]将this指针放进ecx 

  Mov edx, dword ptr[ecx]将虚表的地址放进edx 

  Call dword ptr[edx+4]:调用虚表中函数 

  虚函数放置顺序与声明顺序一样,成员变量也是 

  虚表中放的不是函数的入口地址,而是一个jmp跳转指令的地址 

单继承,多继承,菱形继承,虚继承时,对象内存中的差异区别?如果存在虚函数呢?

  单继承: 

https://ask.qcloudimg.com/http-save/yehe-1681754/4y2zocd79j.png?imageView2/2/w/1620

 

多继承:

https://ask.qcloudimg.com/http-save/yehe-1681754/kgr5xoyi99.png?imageView2/2/w/1620

 

菱形继承:

https://ask.qcloudimg.com/http-save/yehe-1681754/v612hnssz3.png?imageView2/2/w/1620

猜你喜欢

转载自blog.csdn.net/qq_41308027/article/details/82942456