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

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

                    --C++实现细节

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

  __FILE__:表示在哪个文件 

  __LINE__:表示在当前多少行 

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

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

https://i-blog.csdnimg.cn/blog_migrate/66d8d7535374bf2359b8c201066d894d.png

 

引用和指针的区别?

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

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

出现异常时,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://i-blog.csdnimg.cn/blog_migrate/eb064349f68423788d1cc385b93183c1.png

 

多继承:

https://i-blog.csdnimg.cn/blog_migrate/4c8102d595dbfb4fa7020010b067416d.png

 

菱形继承:

https://i-blog.csdnimg.cn/blog_migrate/feab401cd32edbec2526dc18f5595a62.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值