C++基础:const、析构函数与虚函数解析
版权申诉
81 浏览量
更新于2024-07-18
收藏 64KB DOCX 举报
"C++基础面试题.docx包含了关于C++编程语言的基础面试问题,涵盖了const符号常量的用法、析构函数和虚函数的作用、堆与栈的区别、头文件的作用以及内存分配方式等多个核心知识点。"
在C++中,`const`关键字用于声明常量,它可以用于不同位置,对指针有不同的影响:
1. `const char *p`:这里的`const`修饰的是指针所指向的数据,意味着不能通过这个指针修改字符串的内容,但指针本身是可以改变的,可以指向其他字符串。
2. `char const *p`:这与上面的情况相同,`const`同样修饰的是指针所指向的字符数组,不允许修改内容。
3. `char *const p`:在这种情况下,`const`修饰的是指针本身,意味着指针一旦被初始化后就不能改变,但指针所指向的字符数组的内容是可以修改的。
析构函数是C++中一个特殊的方法,它的主要作用是在对象生命周期结束时,即对象销毁时,自动调用以释放对象占用的资源。析构函数没有返回值,没有参数,并且不能被直接调用,只能由系统在适当的时候自动调用。虚函数则是在多态性中起到关键作用,它允许通过基类指针或引用调用派生类的重写版本,从而实现动态绑定。为了实现这种行为,需要在基类中声明函数为虚函数。
堆和栈是两种不同的内存管理方式。栈是编译器自动管理的内存区域,通常用于存储局部变量和函数参数,它的分配和释放快速但空间有限。而堆是程序员手动管理的内存,通过`malloc`或`new`进行分配,`free`或`delete`进行释放,提供了更大的灵活性但需要程序员自行控制生命周期,否则可能导致内存泄漏。
头文件在C++中扮演着重要的角色,它们通常包含函数声明、类定义和其他接口信息。使用头文件可以使程序模块化,方便代码重用,同时提供类型安全检查,确保函数调用和声明匹配。如果函数实现与头文件声明不符,编译器会在编译阶段给出错误提示。
内存分配主要有三种方式:
1. 静态存储区域分配:例如全局变量和静态变量,这些内存在整个程序运行期间都存在,不会自动释放。
2. 栈上分配:在函数执行时,局部变量的内存由栈提供,函数执行完毕后自动释放。
3. 堆上分配:通过`malloc`、`calloc`、`realloc`或`new`进行动态内存分配,程序员需要记住手动使用`free`或`delete`来释放内存,否则可能导致内存泄漏。
此外,面试题还涉及了BOOL类型、浮点数和指针与零值比较的if语句。BOOL类型的变量通常用于逻辑判断,可以用`if(flag)`或`if(!flag)`来检查布尔值。对于浮点数的比较,由于浮点数的精度问题,直接比较可能会出现问题,因此通常会设置一个极小的阈值(如`const float EPSILON=0.00001`),然后检查数值是否在阈值范围内。对于指针,比较其是否为NULL通常用于检查指针是否已正确初始化。
2021-04-09 上传
2021-12-16 上传
2020-02-21 上传
2021-08-30 上传
2023-06-14 上传
2023-08-01 上传
2023-08-01 上传
2021-08-10 上传
2023-02-27 上传
java李杨勇
- 粉丝: 37w+
- 资源: 3180
最新资源
- 特殊的东西
- sqlite-snapshot-202101271915.tar.gz
- darklaf:Darklaf-基于Darcula-Laf的主题化Swing外观
- MyFinance-Backend:应用程序记录您的钱
- pdgrab
- JavaWeb课设-报名系统.zip
- 虚拟内存管理器:设计的虚拟内存管理器,可将逻辑地址转换为物理地址
- adbGUI:用C#编写的Android调试桥(ADB)包装
- Filter Only Debugs (like Developer Console)-crx插件
- matlab二值化处理的代码-clipper:稳健的成对数据关联的图论框架
- BUPT 数据库课程设计.zip
- Portfolio_site
- Jupyter-Book-Demo
- MIPS_OperatingSystem:BUAA操作系统
- spring-parent:学习 Spring 的练习项目,用于记录学习过程的知识点及问题,及整合其他框架
- laravel-http-stats