C/C++面试总结(持续更新.......)

1.C++析构函数?(无参数无返回值,不能重载,所以一个类只有一个)

2.C++的重载,重写,重定义?(重写仅当方法在父类上为虚函数其他必须一样;重定义方法在父类为普通函数参数列表可以不同/相同,父类为虚函数参数列表要不同;重载同一定义域相同函数名参数列表不同)

3.C++static关键字的作用?(可以让方法和变量属于类的普通函数和方法,没有实例的指针指向,随着类的加载而加载,在类加载完成后才会初始化实例)

4.在虚函数和纯虚函数的定义中为甚麽不能有static标识符?(因为static随着类初始化,没有实例指针的指向,而虚函数和纯虚函数的定义要通过实例的指针来实现,初始化的时机不同所以不能加static!)

5.C++虚函数和纯虚函数?(可以实现多态,父类引用指向子类对象,虚函数可以有定义也可以有实现,纯虚函数只能有定义)

6.C++抽象类和接口?(纯虚函数只定义了函数没有进行实现,只要存在纯虚函数,那么该类就变成抽象类,虚函数主要为了方法可以被重写来实现多态有定义也有实现,接口类中所有函数都是纯虚函数称为接口,是一种特殊的抽象类)

7.new,malloc,delete,free?(new和free是c语言的库函数,malloc和delete是c++的操作符,new和free对类不能够执行构造函数和析构函数,new对象时要指定数据类型不需要计算对象内存,malloc需要计算对象内存返回void万能指针需要进行强转)

8.函数后面加const意思?(函数体内不能对成员数据做任何改变,类的一个const实例,那么它就只能调用有const修饰的函数)

9.参数传递,传值,传引用传指针的区别?(传值:实际上传入的是一个副本拷贝不会改变实参本身的值。 传引用:传入的是值的地址是会修改值的,引用底层是常指针实现的不能改变指针指向但是可以改变内存地址的值。 传指针:传入的也是地址可以修改值,但是指针可以进行指向也可以修改内存值)

10.函数返回时返回值引用指针的区别?(返回值:是会生成一个临时对象的(注意c++的对象拷贝构造函数 T a = fun() 一定注意!)!返回引用:返回的是地址!)

11.虚函数可以内联吗?(内联函数是为了加快经常使用的简单的函数的效率在编译时展开代码省去了函数调用的开销虚函数可以声明为内联,但是是不起作用的不能重载为内联,内联是在编译时期进行代码展开,而虚函数是在运行期间才会被确定因为要实现多态!)

12.右值引用?((左值引用)引用是:int & rodents = rates(用于接收变量);const引用:const int &a = 1;  右值引用:int &&a=1;是对临时对象的存储 以及常量,函数返回值的临时常量。)

13.C语言的结构体共同体字节计算?(结构体:需要考虑内存对齐(每个单元多大取决于结构体中最大基本类型的大小。)

共用体:内存中所占字节数为共同体中长度最大的元素所占用的字节数)

14.vector,list,map,set?(容器(vector...),算法(一些API),迭代器

1.vector:底层是数组实现。连续空间存储数据,不用存储指针节省空间,访问数据快,但是删除和插入数据O(n)慢,可以支持空间动态扩容和缩容(底层:当数据接近上限,或者数据量接近下限支持空间大小的调整比如扩大1/2缩小1/2等,由于调整空间后有迁移数据的问题在这里一般不会直接把所有数据一次性的迁移可能是会在插入和删除元素的时候进行批迁移!)

2.list:底层双向链表实现。离散空间存储数据,需要存储前后指针耗费空间,访问数据麻烦为O(n),但是删除和插入在可以O(1)找到节点的话那么时间复杂度为O(1),不存在扩容和缩容的问题,

3.map:底层使用红黑树来实现。键值对的数据结构,键值不允许重复  4.set:底层也是使用红黑树来实现。只有键值的数据结构,键值不允许重复。)

15.stl线程安全?(多个线程读取是安全的,多线程可以对不同容器同时写入这是安全的,但是对同一容器有线程写,有线程读取时候不安全的,所以对获取迭代器,修改容器,调用算法api时候需要加锁的!)

猜你喜欢

转载自blog.csdn.net/taka_is_beauty/article/details/89291900