程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

C/C++面试题(一)(c/c++面试题库)

balukai 2025-04-07 11:53:44 文章精选 5 ℃

1.C和C++的区别是什么?

  • C 是面向过程的编程语言,不支持类和对象。
  • C++ 是C的超集,支持面向对象编程(类、继承、多态等),同时引入了STL(标准模板库)和异常处理等特性。

2.const关键字的作用是什么?

  • 用于定义常量,表示变量的值不可修改。
  • 在C++中,const还可以修饰成员函数,表示该函数不会修改对象的状态(如类的成员变量)。

3.static关键字的作用是什么?

  • 在C中
    • 修饰局部变量:使变量的生命周期延长到整个程序运行期间。
    • 修饰全局变量或函数:限制其作用域为当前文件。
  • 在C++中
    • 修饰类的成员变量或函数:使其属于类而不是对象,可以通过类名直接访问。
  • 示例:
static int count = 0; // 静态局部变量
class MyClass {
    static int value; // 静态成员变量
};

4.指针和引用的区别是什么?

  • 指针
    • 是一个变量,存储的是另一个变量的地址。
    • 可以为空(nullptr)。
    • 可以重新指向其他地址。
  • 引用
    • 是变量的别名,必须在初始化时绑定到一个变量。
    • 不能为空,也不能重新绑定到其他变量。
  • 示例:
int a = 10;
int *p = &a; // 指针
int &r = a;  // 引用

5.什么是内存泄漏?如何避免?

  • 内存泄漏:程序动态分配的内存没有被释放,导致内存浪费。
  • 避免方法
    • 使用智能指针(如std::unique_ptr、std::shared_ptr)。
    • 确保new和delete成对使用。
    • 使用RAII(C++ 中资源管理的核心思想,通过将资源绑定到对象生命周期,彻底解决了手动管理资源的繁琐和风险)技术。

6.什么是虚函数?它的作用是什么?

  • 虚函数:在基类中使用virtual关键字声明的函数,允许在派生类中重写。
  • 作用:实现运行时多态,通过基类指针调用派生类的函数。
  • 示例:
class Base {
public:
    virtual void func() { cout << "Base" << endl; }
};
class Derived : public Base {
public:
    void func() override { cout << "Derived" << endl base b='new' derived b->func(); // 输出 "Derived"

7.什么是纯虚函数和抽象类?

  • 纯虚函数:在基类中声明但没有实现的虚函数,使用= 0语法。
  • 抽象类:包含纯虚函数的类,不能实例化,只能作为基类。
  • 示例:
class AbstractClass {
public:
    virtual void func() = 0; // 纯虚函数
};

8.STL中的vector和list有什么区别?

  • vector
    • 动态数组,支持随机访问。
    • 在尾部插入和删除效率高,但在中间插入和删除效率低。
  • list
    • 双向链表,不支持随机访问。
    • 在任意位置插入和删除效率高。
vector v = {1, 2, 3};
list l = {1, 2, 3};

9.什么是深拷贝和浅拷贝?

  • 浅拷贝:只复制对象的指针,而不是指针指向的内容,可能导致多个对象共享同一块内存。
  • 深拷贝:复制对象及其指向的内容,生成完全独立的对象。
  • 示例:
class MyClass {
public:
    int *data;
    MyClass(const MyClass &other) { // 深拷贝
        data = new int(*other.data);
    }
};

10.什么是多态?如何实现?

  • 多态:同一操作作用于不同的对象,可以有不同的行为。
  • 实现方式
    • 编译时多态:函数重载、运算符重载。
    • 运行时多态:虚函数和继承。
  • 示例:
class Animal {
public:
    virtual void sound() { cout << "Animal sound" << endl; }
};
class Dog : public Animal {
public:
    void sound() override { cout << "Bark" << endl animal a='new' dog a->sound(); // 输出 "Bark"

11.什么是volatile关键字?

  • 作用:告诉编译器不要优化该变量,因为它可能会被程序以外的因素修改(如硬件或中断)。
  • 示例:
volatile int flag = 0; // flag可能会被外部修改

12.C++中的四种类型转换是什么?

  • static_cast:用于基本类型的转换。
  • dynamic_cast:用于多态类型的转换。
  • const_cast:用于去掉const属性。
  • reinterpret_cast:用于低级别的类型转换。
  • 示例:
int a = 10;
double b = static_cast(a);

13.如何避免头文件重复包含?

  • 使用预处理指令#ifndef、#define、#endif。
  • 示例:
#ifndef MY_HEADER_H
#define MY_HEADER_H
// 头文件内容
#endif
最近发表
标签列表