C++ 面试题 基础篇

1. new 和 malloc区别
答: new 分配的空间不一定是堆 其次分配失败返回的方式不同 一个抛异常 一个返回NULL new分配对象无需指针转换,也无需指定分配大小 new分配对象会调用构造函数 new可以直接分配数组
2. 派生类和基类的构造和析构顺序
答: 构造:先基类 后派生类 析构:先派生类 后基类
3. Vector类底层实现
答:底层结构是数组 可以动态扩增 以两倍大小速度扩增 扩增后把原来的数组的内容拷贝过来。
4. C++多态 如何用C实现多态
答:通过虚函数实现的 派生对象和基对象同一函数可以有不同的实现
C实现多态可以在struct里面加一个虚表指针 指向一个存储虚函数指针的结构体 在构造的时候不同的构造函数手工绑定虚指针
5. _stdcall _cdecl _fastcall
答: stdcall _cdecl 的压栈方式都是从右往左压栈 不同的是stdcall是被调用者清理堆栈 后者是调用者清理堆栈
6. 一个线程有几个栈
答: 一个线程在默认情况下只有一个栈,位置在应用程序的进程地址空间中,而在内核中并没有栈,而是一个叫做线程内核对象的结构体,用来记录该线程的相关参数。
7. C++多重继承会有什么问题
答:会产生菱形继承问题 造成数据的冗余 可以通过虚继承来避免这一点 但是无论如何也不推荐多重继承 我看各个游戏开发书都是这么认为的。
8. C++多态的内存布局
答:C++中对象的内存布局首先是虚函数表指针 指向了虚函数表 存储了虚函数的地址,虚表中第一个虚函数是析构函数 前面还有type_info的指针 如果是简单继承 那么虚表中会添加派生类新加的虚函数指针项 而在对象内存中会在后面添加派生的数据成员。 而在多继承的情况下 例如C继承A和B 那么AB的虚指针都会保留下来,不会合并 。在原来的AB对象后面加新的数据成员。
9. C++堆和栈的区别
答:堆和栈是进程空间的不同区域 一个地址从小到大递增 一个从大到小递减 不同的是栈的地址空间在编译器预先分配好 每个scope的进入和推出代表了压栈和入栈 而堆的空间则是程序可以根据情况动态的申请 当然存在一定的代价。
10. Private和protected继承的区别 protected哪种情境下使用
答:private不可以被类外变量和继承类访问 protected可以被继承类访问
11. 用过哪些设计模式?
答:工厂模式 :可以根据给定的信息创建实例
单例模式:保证一个类只有一个对象 通过将构造函数delete 并提供一个单例对象的接口来实现 可以延迟构造对象
观察者模式: 分为观察者和观察目

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值