明天就是面试了啊啊啊啊啊啊啊啊啊啊,面试题没有几个会的还,日了,好想去实习,想去蚂蚁OceanBase呜呜呜

我要进大厂口牙!

c++中的多态实际上是通过重载(overload)和重写(override)实现的,两者区别其实蛮大的。

在这之前我们先介绍一些我不会的基础知识吧。

首先就是三种访问修饰符,private,public,protected

相对而言protected较为少见

1
2
3
public修饰符用于指定类中的成员可以被类中的成员函数访问,也可以被类外成员访问
private修饰符用于指定类中的成员可以被类中的成员函数访问,类外代码不可见
protected修饰符,除了类中的成员函数可以访问,其子类(派生类)也是可见的,但对于其他类外成员不可访问

重载和重写

重载是在同一作用域里面,不同的函数,但具有同样的函数名,依靠不同的参数区分(参数类型,参数个数,以及参数类型不同时的参数顺序)。使得同一个函数可以有多个不同的版本,这属于编译时多态

规则:

  1. 不能根据函数的访问权限,返回值类型,抛出的异常进行重载,只能根据参数
  2. 不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(不一样的参数类型)

重写则是指在派生类中重新实现父类中的虚函数,以提供特定于派生类的实现,强调覆盖。是运行时多态

规则:

  1. 重写方法的参数列表,返回值,抛出的异常于父类中的方法是一样的
  2. 被重写的方法不能是private
  3. 重写方法的访问权限必须大于等于父类中的被重写的方法权限
  4. 静态方法不能被重写为非静态方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Base
{
public:
virtual void print()
{

}

};
class Derived
{
public:
void print() override
{

}
}

使用多态是为了避免基类中有太多臃肿的重载代码且难以维护

重写与重载的本质就是,重写引入overrided关键字,且有且仅有一个方法

在下一节中我们会继续讲一下重写这个运行时多态的详细内容