C++基础:const、析构函数与虚函数解析

版权申诉
0 下载量 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通常用于检查指针是否已正确初始化。
2024-12-28 上传