C++函数重载、覆盖与隐藏的区别

一.成员函数的重载,其特点:


(1)在同一个类中;
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。

 
二.覆盖是指派生类函数覆盖基类函数,其特点:

(1)位于派生类与基类中;
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字

扩展理解

1.加virtual关键字的函数是虚函数,它是在基类中定义的,它的引入是因为不确定其派生类的具体行为,函数的覆盖虚函数多态性联系在一起,与父类子类有关

2.虚函数体现了C++中的多态性

C++的多态性:在基类的函数前加上virtual关键字,在派生类中重写该函数,在编译的时候,利用迟绑定技术, 也就是编译时并不确定调用哪个函数,运行时就会根据对象的实际类型来确定调用相应的函数。

3.覆盖函数都是虚函数, 反之不然,有可能是隐藏,即当派生类的函数与基类函数同名不同参数,且基类函数是虚函数时不是覆盖函数。


三.隐藏是指派生类的函数屏蔽了与其同名的基类函数,有两种情况:
(1)如果派生类的函数与基类的函数同名参数不同。此时基类的函数将被隐藏(注意别与重载混淆,重载发生在同一个类中);
(2)如果派生类的函数与基类的函数同名同参数,但基类函数没有virtual 关键字。此时基类的函数被隐藏(注意别与覆盖混淆,覆盖要求基类函数必须有virtual关键字)。

原文地址:https://www.cnblogs.com/dyllove98/p/3123035.html