卡码笔记
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
  • 基础与语法

  • 面向对象

    • C++构造函数有几种,分别什么作用?
    • 什么是构造函数和析构函数?构造函数和析构函数可以是虚函数吗?为什么?
    • C++的重载和重写,以及它们的区别和实现方式
      • 简要回答
      • 详细回答
      • 代码示例
      • 知识拓展
    • C++怎么实现多态
    • C++中的虚函数和纯虚函数有什么区别?
    • 虚函数怎么实现的?
    • 虚函数表是什么
    • 多重继承的优缺点及菱形继承问题
    • 如何禁止一个类被继承
    • 深拷贝和浅拷贝的区别?
    • this指针的原理
    • C++如何实现一个单例模式?
  • STL 与容器

  • 内存管理

  • C++11 与现代 C++

  • 智能指针

  • 并发与 I/O

# 面试官问,重载和重写,又追着问virtual 和 override的区别,我有亿点点懵

简述一下 C++ 的重载和重写,以及它们的区别和实现方式。

# 简要回答

重载(Overload):函数名相同,参数不同,发生在同一个作用域(类内)。

即在同一个类里,函数名字一样,但参数不一样,编译器自己能分清。

重写(Override):派生类中重写父类的虚函数,函数名、参数、返回值完全相同,使用virtual 和 override 关键字。

即子类把父类的虚函数重新写一遍,运行时决定用哪一个。

# 详细回答

  • 重载(函数重载 Function Overloading)

重载就是一个函数名可以用好几次,只要参数类型或者个数不一样就行。比如你写个 print 函数,可以传 int、float、string,各自有不同的实现,这就是重载。

它有以下三个特点

  1. 发生在同一个类里面
  2. 编译器在编译的时候能决定哪个用,叫编译期多态,属于静态绑
  3. 和返回值没有关系,不能光靠返回值来区分重载
  • 重写(函数重写 Function Overriding)

重写就是子类对父类里的虚函数重新写一遍,达到“改写原来功能”的目的。

它有以下四个特点

  1. 必须有继承关系
  2. 父类函数要有virtual类型
  3. 子类函数和父类一模一样(名字、参数、返回值都不能改)
  4. 最好写上override,避免写错(c++11提倡这么写)

# 代码示例

  • 重载
class Printer {
public:
    void show(int x) {
        std::cout << "打印 int: " << x << std::endl;
    }

    void show(double x) {
        std::cout << "打印 double: " << x << std::endl;
    }
};
// 同一个类,函数名一样,参数不一样,这就是重载
1
2
3
4
5
6
7
8
9
10
11
  • 重写
class Animal {
public:
    virtual void speak() {
        std::cout << "动物在叫" << std::endl;
    }
};

class Dog : public Animal {
public:
    void speak() override {
        std::cout << "狗在叫:汪汪汪" << std::endl;
    }
};

// 用父类指针调用:
Animal* a = new Dog();
a->speak();  // 输出:狗在叫:汪汪汪
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 知识拓展

  • 知识图解 image

  • 什么是虚函数

答:virtual 是用来支持“多态”的关键字。它告诉编译器,这个函数将来可能会被“子类改写”,所以真正调用哪个版本,要在运行时决定。

  • 面试官可能追问
  1. 重载能不能靠返回值来区分?

答: 不行,编译器光看返回值分不清哪个函数,得靠参数。

  1. override 有啥用?

答: 防止你写错函数签名,比如你拼错了参数,它能报错。

  1. 不加 virtual 会怎样?

答: 那就不是重写,调用的是父类的函数,不是子类的。4. virtual 和 override 的区别?

答: virtual 是用在父类函数上,告诉编译器:“这个函数以后可能会被重写”; override 是用在子类函数上,告诉编译器:“我就是要重写你父类的函数”。

  1. virtual 和 override 哪个必须?

答: virtual 是前提,父类必须是虚函数;override 是附加保障,算是一种检查机制。

Last Updated: 3/10/2026, 6:08:48 PM

← 什么是构造函数和析构函数?构造函数和析构函数可以是虚函数吗?为什么? C++怎么实现多态 →

评论

验证登录状态...

侧边栏
夜间
卡码简历
代码随想录
卡码投递表🔥
2026群
添加客服微信 PS:通过微信后,请发送姓名-学校-年级-2026实习/校招
支持卡码笔记
鼓励/支持/赞赏Carl
1. 如果感觉本站对你很有帮助,也可以请Carl喝杯奶茶,金额大小不重要,心意已经收下
2. 希望大家都能梦想成真,有好的前程,加油💪