最近在学习过程中遇到了令人迷惑的隐藏!!!
顺便在总结一下:
成员函数重载的特征:
(1)相同的范围(在同一个类中)
(2)函数名字相同
(3)参数不同
(4)virtual关键字可有可无
覆盖是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类和基类)
(2)函数名字相同
(3)参数相同
(4)基类函数必须有virtual关键字
隐藏是指派生类的函数屏蔽了基类函数,规则:
(1)派生类函数与基类函数同名,参数不同。不论有无virtual关键字,基类函数被隐藏(与重载区分)
(2)派生类函数与基类函数同名,参数相同。基类函数没有virtual关键字,基类函数被隐藏(与覆盖区分)
eg:
#include
using namespace std;
class Base
{
public:
virtual void f(float x) { cout<<"Base::f(float) "<
void g(float x) { cout<<"Base::g(float) "<
void h(float x) { cout<<"Base::h(int) "<
};
class Derived::public Base
{
public:
virtual void f(float x) { cout<<"Derived::f(float) "<}
void g(int x) { cout<<"Derived::g(int) "<
void h(float x) { cout<<"Derived::h(float) "<
};
如上:
(1)函数Derived::f(float)覆盖了函数Base::f(float)。
(2)函数Derived::g(int)隐藏了函数Base::g(float),而不是重载。
(3)函数Derived::h(float)隐藏了函数Base::h(float),而不是覆盖。
阅读(1322) | 评论(0) | 转发(0) |