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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值