C++八股 | 函数重写(覆盖)
1.什么是函数覆盖
派生类对基类同名同参函数进行重新修改/重写的过程
2.函数覆盖的条件是什么?
- 基类有virtual虚函数
- 同名同参函数
- 基类指针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 | 无要求 | 基类必须有 | 同上 |