一.成员函数的重载,其特点:
(1)在同一个类中;
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
二.覆盖是指派生类函数覆盖基类函数,其特点:
(1)位于派生类与基类中;
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
扩展理解:
1.加virtual关键字的函数是虚函数,它是在基类中定义的,它的引入是因为不确定其派生类的具体行为,函数的覆盖与虚函数多态性联系在一起,与父类子类有关。
2.虚函数体现了C++中的多态性
C++的多态性:在基类的函数前加上virtual关键字,在派生类中重写该函数,在编译的时候,利用迟绑定技术, 也就是编译时并不确定调用哪个函数,运行时就会根据对象的实际类型来确定调用相应的函数。
3.覆盖函数都是虚函数, 反之不然,有可能是隐藏,即当派生类的函数与基类函数同名不同参数,且基类函数是虚函数时不是覆盖函数。
三.隐藏是指派生类的函数屏蔽了与其同名的基类函数,有两种情况:
(1)如果派生类的函数与基类的函数同名但参数不同。此时基类的函数将被隐藏(注意别与重载混淆,重载发生在同一个类中);
(2)如果派生类的函数与基类的函数同名且同参数,但基类函数没有virtual 关键字。此时基类的函数被隐藏(注意别与覆盖混淆,覆盖要求基类函数必须有virtual关键字)。