c++ 面试题

C++ 面试题通常涵盖基础知识、面向对象编程、内存管理、模板、STL(标准模板库)等方面。以下是一些常见的 C++ 面试题及其简要解答,供你参考:


1. C++ 基础知识

1.1 C++ 和 C 的区别是什么?
  • C++ 是 C 的超集,支持面向对象编程(OOP)。
  • C++ 引入了类、继承、多态、模板、异常处理等特性。
  • C++ 支持函数重载和运算符重载,而 C 不支持。
  • C++ 提供了标准模板库(STL),而 C 没有。
1.2 const 关键字的作用是什么?
  • 用于定义常量,值不可修改。
  • 修饰指针时:
    • const int* p:指针指向的值不可修改。
    • int* const p:指针本身不可修改。
    • const int* const p:指针和指向的值都不可修改。
  • 修饰成员函数时,表示该函数不会修改类的成员变量。
1.3 static 关键字的作用是什么?
  • 在函数内部:使变量在函数调用之间保持其值。
  • 在类中:
    • 静态成员变量:类的所有对象共享该变量。
    • 静态成员函数:只能访问静态成员变量,不能访问非静态成员。
1.4 inline 函数的作用是什么?
  • 建议编译器将函数体直接插入调用处,以减少函数调用的开销。
  • 适用于短小的函数。

2. 面向对象编程

2.1 什么是面向对象编程(OOP)?
  • OOP 是一种编程范式,基于对象和类的概念。
  • 四大特性:
    • 封装:隐藏实现细节,提供接口。
    • 继承:从基类派生出新类,复用代码。
    • 多态:通过基类指针调用派生类的重写函数。
    • 抽象:定义接口而不实现具体细节。
2.2 什么是虚函数?它的作用是什么?
  • 虚函数是在基类中使用 virtual 关键字声明的函数。
  • 允许派生类重写该函数,实现运行时多态。
  • 通过基类指针或引用调用虚函数时,实际调用的是派生类的实现。
2.3 什么是纯虚函数和抽象类?
  • 纯虚函数是在基类中声明但没有实现的虚函数,语法为 virtual void func() = 0;
  • 包含纯虚函数的类称为抽象类,不能实例化。
  • 派生类必须实现纯虚函数,否则派生类也是抽象类。
2.4 什么是多重继承?它有什么问题?
  • 多重继承是指一个类可以从多个基类继承。
  • 问题:
    • 菱形继承问题:如果两个基类继承自同一个祖先类,会导致派生类中包含重复的祖先类成员。
    • 解决方法:使用虚继承。

3. 内存管理

3.1 newmalloc 的区别是什么?
  • new 是 C++ 运算符,malloc 是 C 标准库函数。
  • new 会调用构造函数,malloc 不会。
  • new 返回具体类型的指针,malloc 返回 void*
  • new 可以重载,malloc 不能。
3.2 什么是内存泄漏?如何避免?
  • 内存泄漏是指程序分配的内存未被释放,导致内存浪费。
  • 避免方法:
    • 使用智能指针(如 std::unique_ptrstd::shared_ptr)。
    • 确保 newdelete 成对使用。
    • 使用 RAII(资源获取即初始化)原则。
3.3 什么是智能指针?
  • 智能指针是 C++11 引入的模板类,用于自动管理动态内存。
  • 常见类型:
    • std::unique_ptr:独占所有权,不能复制。
    • std::shared_ptr:共享所有权,使用引用计数。
    • std::weak_ptr:弱引用,不增加引用计数。

4. 模板

4.1 什么是模板?
  • 模板是 C++ 的泛型编程工具,允许编写与类型无关的代码。
  • 分为函数模板和类模板。
4.2 函数模板和类模板的区别是什么?
  • 函数模板:用于定义通用函数。
    template <typename T>
    T add(T a, T b) {return a + b;
    }
    
  • 类模板:用于定义通用类。
    template <typename T>
    class Box {
    private:T value;
    public:void setValue(T v) { value = v; }T getValue() const { return value; }
    };
    
4.3 什么是模板特化?
  • 模板特化是为特定类型提供特殊的实现。
  • 分为全特化和偏特化。

5. STL(标准模板库)

5.1 STL 的组成部分有哪些?
  • 容器:如 vectorlistmap
  • 算法:如 sortfind
  • 迭代器:用于遍历容器。
  • 函数对象:如 lessgreater
  • 适配器:如 stackqueue
5.2 vectorlist 的区别是什么?
  • vector:动态数组,支持随机访问,插入和删除效率较低。
  • list:双向链表,不支持随机访问,插入和删除效率较高。
5.3 mapunordered_map 的区别是什么?
  • map:基于红黑树实现,键值对有序。
  • unordered_map:基于哈希表实现,键值对无序,查找效率更高。

6. 高级特性

6.1 什么是 RAII?
  • RAII(资源获取即初始化)是一种编程技术,通过对象的生命周期管理资源。
  • 资源在构造函数中获取,在析构函数中释放。
6.2 什么是移动语义和右值引用?
  • 右值引用:T&&,用于绑定临时对象。
  • 移动语义:通过移动构造函数和移动赋值运算符,避免不必要的拷贝。
6.3 什么是 Lambda 表达式?
  • Lambda 表达式是一种匿名函数,语法为:
    [capture](parameters) -> return_type { body }
    
  • 示例:
    auto add = [](int a, int b) { return a + b; };
    std::cout << add(2, 3); // 输出 5
    

7. 编程题

7.1 实现一个单例模式
class Singleton {
private:static Singleton* instance;Singleton() {} // 私有构造函数public:static Singleton* getInstance() {if (!instance) {instance = new Singleton();}return instance;}
};Singleton* Singleton::instance = nullptr;
7.2 实现一个简单的智能指针
template <typename T>
class SimpleUniquePtr {
private:T* ptr;public:SimpleUniquePtr(T* p = nullptr) : ptr(p) {}~SimpleUniquePtr() { delete ptr; }T* operator->() const { return ptr; }T& operator*() const { return *ptr; }// 禁止拷贝SimpleUniquePtr(const SimpleUniquePtr&) = delete;SimpleUniquePtr& operator=(const SimpleUniquePtr&) = delete;
};

总结

以上是一些常见的 C++ 面试题及其解答。在准备面试时,建议结合实际代码练习,深入理解每个概念和技术的应用场景。祝你面试顺利!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14587.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

存储系统、网盘系统的访问留痕

一、适用场景 1、需要了解是否存在非法访问存储系统或网盘系统&#xff1a;各企业或单位为方便远程办公或远程管理&#xff0c;若自建&#xff08;保护隐私数据或敏感资料&#xff09;了存储系统或网盘系统&#xff0c;那么到底有哪些ip地址或用户从远程公网访问存储系统或网盘…

求助DeepSeek帮我开发一个直线审批流程设计页面Vue2.0

之前使用文心一言协助开发过类似的页面&#xff0c;需求方认为某些业务表单需要添加审批流程&#xff0c;可以人为设置审批步骤&#xff0c;由于需求很模糊而且人/天有限&#xff0c;当时的提问很混乱&#xff0c;内容如下&#xff1a; 我的vue2.0系统中需要审批流程设计页面&a…

初级数据结构:栈和队列

目录 一、栈 (一)、栈的定义 (二)、栈的功能 (三)、栈的实现 1.栈的初始化 2.动态扩容 3.压栈操作 4.出栈操作 5.获取栈顶元素 6.获取栈顶元素的有效个数 7.检查栈是否为空 8.栈的销毁 9.完整代码 二、队列 (一)、队列的定义 (二)、队列的功能 (三&#xff09…

LLM:DeepSeek 系列(二)

原文链接 3、DeepSeek-V2 DeepSeek-V2 发布于 2024 年 5 月&#xff0c;为多领域专家&#xff08;MoE&#xff09;语言模型&#xff0c;包含总共 2360 亿个参数&#xff0c;其中每个词元激活 210 亿个参数&#xff0c;并支持 12.8 万个词元的上下文长度。DeepSeek-V2 采用包括…

【学术投稿】第五届计算机网络安全与软件工程(CNSSE 2025)

重要信息 官网&#xff1a;www.cnsse.org 时间&#xff1a;2025年2月21-23日 地点&#xff1a;中国-青岛 简介 第五届计算机网络安全与软件工程&#xff08;CNSSE 2025&#xff09;将于2025年2月21-23日在中国-青岛举行。CNSSE 2025专注于计算机网络安全、软件工程、信号处…

开源项目介绍-词云生成

开源词云项目是一个利用开源技术生成和展示词云的工具或框架&#xff0c;广泛应用于文本分析、数据可视化等领域。以下是几个与开源词云相关的项目及其特点&#xff1a; Stylecloud Stylecloud 是一个由 Maximilianinir 创建和维护的开源项目&#xff0c;旨在通过扩展 wordclou…

Docker基础以及单体实战

Docker 一、Docker1.1 Docker组成1.2 Dcoker运行图1.3 名称空间Namepace 1.4 docker、Docker compose、kubermetes 二、Docker安装2.1 在线Docker安装2.2 使用官方通用安装脚本2.3 二进制安装Docker三、Docker基础命令3.1 启动类3.2 镜像类3.3 容器类3.4 网络类3.5 Docker comp…

2025年日祭

本文将同步发表于洛谷&#xff08;暂无法访问&#xff09;、CSDN 与 Github 个人博客&#xff08;暂未发布&#xff09; 本蒟自2025.2.8开始半停课。 任务计划&#xff08;站外题与专题&#xff09; 数了一下&#xff0c;通过人数比较高的题&#xff0c;也就是我准备补的题&a…

UIAbility 生命周期方法

生命周期流程图 UIAbility的生命周期官方文档地址https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/uiability-lifecycle-V13 1. onCreate(want: Want, launchParam: LaunchParam) 触发时机&#xff1a;Ability首次创建时 作用&#xff1a;初始化核心资源…

模型 冗余系统(系统科学)

系列文章分享模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。为防故障、保运行的备份机制。 1 冗余系统的应用 1.1 冗余系统在企业管理中的应用-金融行业信息安全的二倍冗余技术 在金融行业&#xff0c;信息安全是保障业务连续性和客户资产安全的关键。随着数字化…

【大数据技术】Spark分布式实现词频统计(hadoop+python+spark)

Spark分布式实现词频统计&#xff08;hadooppythonspark&#xff09; 搭建完全分布式高可用大数据集群&#xff08;VMwareCentOSFinalShell&#xff09; 搭建完全分布式高可用大数据集群&#xff08;HadoopMapReduceYarn&#xff09; 本机PyCharm远程连接CentOS虚拟机&#x…

28.<Spring博客系统⑤(部署的整个过程(CentOS))>

引入依赖 Spring-boot-maven-plugin 用maven进行打包的时候必须用到这个插件。看看自己pom.xml中有没有这个插件 并且看看配置正确不正常。 注&#xff1a;我们这个项目打的jar包在30MB左右。 <plugin><groupId>org.springframework.boot</groupId><artif…

C++Primer学习(2.2)

2.2 变量 变量提供一个具名的、可供程序操作的存储空间。C中的每个变量都有其数据类型,数据类型决定着变量所占内存空间的大小和布局方式、该空间能存储的值的范围&#xff0c;以及变量能参与的运算。对C程序员来说,“变量(variable)”和“对象(object)”一般可以互换使用。 术…

电脑开机提示按f1原因分析及终极解决方法来了

经常有网友问到一个问题&#xff0c;我电脑开机后提示按f1怎么解决&#xff1f;不管理是台式电脑&#xff0c;还是笔记本&#xff0c;都有可能会遇到开机需要按F1&#xff0c;才能进入系统的问题&#xff0c;引起这个问题的原因比较多&#xff0c;今天小编在这里给大家列举了比…

Linux系统命令无法使用(glib库相关问题)

1.背景描述 Yum强制安装了一些软件&#xff0c;安装软件成功无报错&#xff0c;完成后不久突然发现系统出问题了&#xff0c;所有的命令无法使用了&#xff0c;如ls、mv、cat等基本命令报错。 relocation error&#xff1a; /lib64/libpthread.so.0: symbol_libc_dl_error_tsd …

Jupyter Notebook自动保存失败等问题的解决

一、未生成配置文件 需要在命令行中&#xff0c;执行下面的命令自动生成配置文件 jupyter notebook --generate-config 执行后会在 C:\Users\用户名\.jupyter目录中生成文件 jupyter_notebook_config.py 二、在网页端打开Jupyter Notebook后文件保存失败&#xff1b;运行代码…

【含文档+PPT+源码】基于Python校园跑腿管理系统设计与实现

项目介绍 本课程演示的是一款基于Python校园跑腿管理系统设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.…

TypeScript 中的联合类型:灵活的类型系统

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

WebStorm设置Vue Component模板

下载vue.js插件 下面有模板样例 Composition API&#xff1a;这是 Vue 3 的一项新特性&#xff0c;允许通过 setup 函数来组织组件逻辑。Options API&#xff1a;这是 Vue 2 和 Vue 3 都支持的传统方式&#xff0c;通过定义组件的 data、methods、computed 等来组织逻辑。 Comp…

解锁AI语音魅力——yoyo鹿鸣在线语音合成器,让创意声音即刻绽放!

yoyo鹿鸣-在线语音合成 人工智能语音克隆生成&#xff0c;二次元&#xff5e; AI工具 | AI探金 可以在AI探金社区来找我&#xff5e; yoyo鹿鸣 - 在线语音生成器 需求人群&#xff1a; 有语音合成需求的用户。 使用场景示例&#xff1a; 合成yoyo鹿鸣语音 等等 产品特色&a…