1. 成员函数被重载的特征:
相同的范围
函数名字相同
参数不同
virtual关键字可有可无
2. 覆盖是指派生类函数覆盖基类函数,特征是
不同的范围(分别位于派生类与基类)
函数名字相同
参数相同
基类函数必须有virtual关键字
#include <iostream>
using namespace std;
class Base{
public:
void f(int x)
{
cout<<"Base::f(int)"<<x<<endl;
}
void f(float x)
{
cout<<"Base::f(float)"<<x<<endl;
}
virtual void g(void)
{
cout<<"Base::g(void)"<<endl;
}
};
class Derived:public Base
{
public:
virtual void g(void)
{
cout<<"Derived::g(void)"<<endl;
}
};
int main()
{
Derived d;
Base *pb=&d;
pb->f(42);
pb->f(3.14f);
pb->g();
return 0;
}
函数f(int)和函数f(float)实现重载,函数g(void)实现覆盖。此外,基类指针指向派生类对象,运行的结果依然是派生类的函数。