C++知识点问题总结

来源:互联网 发布:淘宝拖动滑块完成验证 编辑:程序博客网 时间:2024/06/06 00:39

语言面试题目类型:

1.对C++关键字的理解程度

比如:哪四个与类型转换相关的关键字,这些关键字有什么特点,应该在什么场景下使用?sizeof关键字?一个空类?只含有析构函数和构造函数的类?析构函数为虚函数的类?

2.C++拷贝构造函数的参数必须为引用类型

起作用并不是为了减少一次内存拷贝,而是为了避免拷贝构造函数无限制的递归下去。

3.容器:容器,序列容器,关联容器

deque,list,queue,priority_queue,stack,vector,map,multimap,set,multiset,bitset,

c++11:forward_list,unordered_map,unoredred_set,unordered_multimap,unordered_multiset.

4.malloc 与new的区别:

答案

1:new 返回指定类型的指针,并且可以自动计算所需要大小,malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针

2: malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。除了分配及最后释放的方法不一样以外,通过malloc或new得到指针,在其它操作上保持一致。

5.多重继承:

虚基类:为了解决二义性,由类A,类B1和类B2以及类C组成了类继承的层次结构。在该结构中,类C的对象将包含两个类A的子对象。由于类A是派生类C两条继承路径上的一个公共基类,那么这个公共基类将在派生类的对象中产生多个基类子对象。如果要想使这个公共基类在派生类中只产生一个基类子对象,则必须将这个基类设定为虚基类。  另外,C++在基类是虚的时,禁止信息通过中间类自动传递给基类,编译器必须在构造派生类对象之前构造基类.

class A{};class B: virtual public A{};class C: virtual public A{};class  D: public A,public B{};

 多重函数导致函数调用的二义性。

解决方法:1.使用作用域解析运算符来澄清编程者的意图;

D d;d.B::singer();
2.在子类中重新定义函数。
6.C++中的vector存在哪里?

vector map set等标准容器默认都是使用内存分配器模板类allocator管理内存的分配、释放。allocator调用new/delete操作符进行批量的内存分配。


推荐书籍:

1.<<Effictive C++>>

2.<<C++ primer>>

3.<<Inside C++ Object Model>

4.<<The C++ Programming Language>>