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 并提供一个单例对象的接口来实现 可以延迟构造对象
观察者模式: 分为观察者和观察目
C++ 面试题 基础篇
最新推荐文章于 2023-05-09 22:22:58 发布