> 文章列表 > C++八股 | 函数重写(覆盖)

C++八股 | 函数重写(覆盖)

C++八股 | 函数重写(覆盖)

        函数重载也是C++内一个重要板块,面试挖八股时会从 三大特性->多态->虚函数->函数重写(覆盖)这样的形式提问

1.什么是函数覆盖

        派生类对基类同名同参函数进行重新修改/重写的过程

2.函数覆盖的条件是什么?

  1. 基类有virtual虚函数
  2. 同名同参函数
  3. 基类指针or引用指向派生类对象

如下代码,构成重写的条件,运行结果:B::i

class A
{
public:virtual void fun(int i){cout<<"A::i"<<endl;}
...
};class B:public A
{
public:void fun(int i){cout<<"B::i"<<endl;}
...
};
void main()
{A *p; //基类指针B b; //派生类对象p=&b; fun(p); //调用派生类b函数成员
}

3.函数重载、重写(覆盖)、隐藏的区别?

重载 重写(覆盖) 隐藏
类个数 无要求 基类、子类(至少两个类) 基类、子类(至少两个类)
参数情况 同名不同参构成重载(与返回值无关) 同名同参

1.同名不同参

2.同名同参+基类无virtual函数

基类中有无virtual 无要求 基类必须有 同上