成员函数的重载、隐藏、覆盖有时候难以辨别,如果你还不太理解,请往下看。
首先,我们先了解一下成员函数被重载,覆盖,隐藏的特征。
成员函数被重载的特征:
(1)在同一个类中
(2)函数名相同,参数不同(参数的个数,参数的类型)
(3)无返回值
成员函数被覆盖的特征:
(1)不在同一个类中
(2)函数名相同,参数相同
(3)基类函数必须有vritual关键字
成员函数被隐藏的特征:
(1)不在同一类中
(2)函数名相同,若参数不同,无论有无vritual关键字,基类函数都被隐藏。
若参数相同,基类函数没有vritual关键字,则基类函数被隐藏。
举例:
注:在主函数中会根据参数个数的不同调用不同的函数。
D继承Base,所以D中存在一份Base的成员函数。而在主函数中调用d.show(),输出D中的结果。
这是因为父类Base的成员函数show()被隐藏了。若想输出父类中成员函数的结果,需要加上域名。
即d.Base::show().
函数覆盖
p1是Base类的指针,p1->show()本应该输出基类成员函数的结果。但是此处却输出子类成员函数的结果。原因在于父类的指针指向了子类对象,而子类对象将父类中的覆盖了。
时间: 2024-10-06 17:21:49