史上最全C/C++面试题汇总 - CSDN博客

文章推薦指數: 80 %
投票人數:10人

五、个人面试经验总结. 其实就应届生来说,面试官考察的时候还是很仁慈的,不会问得很深,而且专挑你会 ... 史上最全C/C++面试题汇总 长安某~ 于 2020-04-2023:29:22 发布 19988 收藏 1075 分类专栏: 面试题 C++ 操作系统 文章标签: 面试 c++ linux 操作系统 版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_44816732/article/details/105646613 版权 面试题 同时被3个专栏收录 2篇文章 0订阅 订阅专栏 C++ 25篇文章 1订阅 订阅专栏 操作系统 16篇文章 0订阅 订阅专栏 总结一些常见面试题,包括准备面试查阅的和自己实际面试中遇到的。

不建议全篇的去背面试题,要学会将面试的知识点进行分类总结,聚合成一块块的知识点,然后去学习串联,推荐《王道程序员面试宝典》这本求职复习书籍,应付一般小厂的面试绰绰有余,内容很全面,建议反复阅读记忆。

一、C/C++部分 多态的实现在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。

如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数,此为多态的表现;Cpp四种强制类型转换const_cast:从字面意思上就可以理解,去除变量的const属性。

static_cast:静态类型转换,一般用于基本类型间的转换,如char->intdynamic_cast:动态转换,同于多态之间的类型转换reinterpret_cast:用于不同类型的指针类型的转换。

类的static成员的特点static成员只有一份拷贝,被该类的所有对象所共享;static成员只能在类外初始化,并存放在全局(静态)存储区,不计入类的大小中;static可以通过类名直接访问,也可以通过对象访问;static成员函数只能访问static成员变量,因为其他的数据成员与生成的对象是绑定的,static成员函数不属于任何对象,没有this指针;指针和引用的区别引用是被引用对象的一个别名,其只能在定义的时候初始化,并且其值不能改变不能为空指针可以在任何时候给其赋值,并且其可以为nullptrsizeof引用为其引用对象的大小,sizeof指针为指针本身的大小对引用取地址为其引用对象的地址谈谈对Cpp内存的理解1、栈区(stack)―由编译器自动分配释放,存放函数的参数值,局部变量的值等。

其操作方式类似于数据结构中的栈。

2、堆区(heap)―一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。

注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3、全局区(静态区)(static)―全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

-程序结束后有系统释放4、文字常量区―常量字符串就是放在这里的。

程序结束后由系统释放5、程序代码区―存放函数体的二进制代码。

谈谈new、delete、malloc、free1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。

它们都可用于申请动态内存和释放内存。

2.对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。

对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。

由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。

3.因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。

注意new/delete不是库函数const关键字1.const修饰类的成员变量,表示成员常量,不能被修改。

2.const修饰函数承诺在本函数内部不会修改类内的数据成员,不会调用其它非const成员函数。

3.如果const构成函数重载,const对象只能调用const函数,非const对象优先调用非const函数。

4.const函数只能调用const函数。

非const函数可以调用const函数。

5.类体外定义的const成员函数,在定义和声明处都需要const修饰符。



intconst*p/constint*p;//value是常数int*constp;//常指针int*constpconst;//常指针、value值也是常数static关键字构造函数为什么不能是虚函数select、poll、epoll字符串的操作(C和C++都说一说)知道STL吗,挑两个你最常用的容器说一说vector:动态扩容数组map:key-value数据,自动排序去重。

有以下几种不同的map(map、multimap、unordered_map、unordered_multimap),其中map用的是红黑树,unordered_map用的是hash表。

怎么确定一个程序是C编译的还是C++编译的如果编译器在编译cpp文件,那么__cplusplus就会被定义,如果是一个C文件被编译,那么_STDC_就会被定义,_STDC_是预定义宏,当它被定义后,编译器将按照ANSIC标准来编译C语言程序。

说一下什么是内存泄漏,如何避免一个文件从源码到可执行文件所经历的过程1.预处理,产生.ii文件2.编译,产生汇编文件(.s文件)3.汇编,产生目标文件(.o或.obj文件)4.链接,产生可执行文件(.out或.exe文件)了解C++新特性吗1.关键字及新语法:auto、nullptr、for2.STL容器:std::array、std::forward_list、std::unordered_map、std::unordered_set3.多线程:std::thread、std::atomic、std::condition_variable4.智能指针内存管理:std::shared_ptr、std::weak_ptr5.其他:std::function、std::bind和lamda表达式C++构造函数和析构函数在父子类之间的调用顺序什么是纯虚函数相当于一个函数接口,只声明不定义。

在其派生类里会重写。

有纯虚函数的类为抽象类,不能实例化出对象。

构造函数和析构函数可以为虚函数吗构造函数不可以,析构函数可以甚至有时候必须声明为虚函数。

栈和堆的区别,什么时候必须使用堆栈是由程序分配的,而堆是由程序员手动去分配释放的。

当需要的空间特别大的时候,就必须使用堆,因为栈的大小是有限制的,一般为5MB左右,所以当需要一个大块空间是,必须在堆上开辟空间。

如何不用sizeof判断一个机器是16位还是32位用宏定义实现swap#defineF(a,b)(a=a^b);(b=a^b);(a=a^b);头文件<>和""的区别遇到#include时,系统先从系统默认的头文件目录中查找头文件遇到#include"math.h"时,系统先从当前的目录中搜索,若没有找到,再从系统默认的头文件中找故包含系统提供的库函数用#include更快当包含用户自定义的.h文件时,使用#include"math.h"更快编写string的构造函数、拷贝构造函数、赋值操作符重载和析构函数 #include #include usingnamespacestd; classMyString{ public: MyString(constchar*pcData=nullptr){ if(pcData==nullptr){ m_pdata=newchar[1]; *m_pdata='\0'; } else{ intlen=strlen(pcData); m_pdata=newchar[len+1]; strcpy(m_pdata,pcData); } } MyString(constMyString&other){ intlen=strlen(other.m_pdata); m_pdata=newchar[len+1]; strcpy(m_pdata,other.m_pdata); } MyString&operator=(constMyString&str){ if(this==&str) return*this; delete[]m_pdata; m_pdata=nullptr; m_pdata=newchar[strlen(str.m_pdata)+1]; strcpy(m_pdata,str.m_pdata); return*this; } voidPrint(){ cout<m_pdata<&num,intl,intr){ if(l>=r)//先检查左右条件 return; inti=l,j=r,x=num[l]; while(i



請為這篇文章評分?