C++面试题

C++面试题

以下是5个C++面试题及其答案。

1. 什么是虚函数(Virtual Function)?它有什么作用?

答案:
虚函数是在基类中声明为虚拟的成员函数,可以在派生类中重写。它通过使用动态绑定(动态多态性)实现运行时的函数调用。虚函数的作用是允许在派生类中重写基类的方法,通过基类指针或引用调用派生类的方法。

2. 什么是纯虚函数(Pure Virtual Function)?如何使用它?

答案:
纯虚函数是在基类中声明为纯虚的虚函数,没有函数体,需要在派生类中进行实现。通过声明纯虚函数,可以将基类设计为一个抽象类,只提供接口而没有具体的实现。使用纯虚函数的语法是在函数声明后面加上= 0

virtual void functionName() = 0;

3. 什么是智能指针(Smart Pointer)?它们解决了什么问题?

答案:
智能指针是一种对象,它表现得像指针,但提供了额外的功能,例如自动内存管理。它们解决了手动管理内存带来的问题,例如内存泄漏和悬挂指针。C++中的智能指针类型有std::shared_ptrstd::unique_ptrstd::weak_ptr

4. C++中什么是拷贝构造函数(Copy Constructor)?它在什么情况下被调用?

答案:
拷贝构造函数是一种特殊的构造函数,它用于创建一个新对象,该对象是通过使用同一类的另一个对象作为参数进行初始化而创建的。拷贝构造函数在以下情况下被调用:

  • 当使用一个对象来初始化同一类的另一个对象时。
  • 当将对象作为函数参数按值传递时。
  • 当函数返回一个对象时。

5. 什么是动态内存分配(Dynamic Memory Allocation)?如何在C++中进行动态内存分配和释放?

答案:
动态内存分配是在程序运行时根据需要分配和释放内存。在C++中,可以使用new运算符进行动态内存分配,并使用delete运算符释放动态分配的内存。

// 动态内存分配
int* ptr = new int; // 分配一个整数大小的动态内存
int* arr = new int[10]; // 分配一个整数数组的动态内存

// 使用动态分配的内存
*ptr = 42;
arr[0] = 1;

// 释放动态内存
delete ptr; // 释放单个对象的内存
delete[] arr; // 释放数组的内存

请注意,在使用new分配的内存后,应使用相应的delete运算符释放内存,以避免内存泄漏。使用delete[]释放动态数组的内存。

相关推荐

  1. C/C++面试

    2024-02-01 18:46:01       21 阅读
  2. C#面试

    2024-02-01 18:46:01       36 阅读
  3. C++面试

    2024-02-01 18:46:01       33 阅读
  4. C++面试

    2024-02-01 18:46:01       34 阅读
  5. 360 C++ 面试

    2024-02-01 18:46:01       34 阅读
  6. C++ 134道面试

    2024-02-01 18:46:01       25 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-01 18:46:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-01 18:46:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-01 18:46:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-01 18:46:01       20 阅读

热门阅读

  1. 「HarmonyOS」EventHub事件通知详细使用方法

    2024-02-01 18:46:01       45 阅读
  2. 一篇文章了解正则表达式的替换技巧

    2024-02-01 18:46:01       34 阅读
  3. docker面试问题二

    2024-02-01 18:46:01       37 阅读
  4. 深入探讨 React 组件生命周期(旧版)

    2024-02-01 18:46:01       36 阅读
  5. IO 模型(BIO、NIO、多路复用)

    2024-02-01 18:46:01       30 阅读
  6. 127-前途与好人

    2024-02-01 18:46:01       30 阅读
  7. Shell - 学习笔记 - 2.6 - Shell $*和$@之间的区别

    2024-02-01 18:46:01       39 阅读
  8. Leetcode刷题(三十二)

    2024-02-01 18:46:01       37 阅读
  9. js跳转页面都有哪些方式?

    2024-02-01 18:46:01       40 阅读
  10. RK3568开发笔记-感光芯片ISL29035调试记录/IIO子系统

    2024-02-01 18:46:01       27 阅读
  11. 机器学习系列——(二)主要任务

    2024-02-01 18:46:01       33 阅读