1.c++的重载
成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
举例:
#include<iostream>
using namespace std;
class Base
{
public:
void f(int x)
{
cout <<x << endl;
}
void f(float x)
{
cout <<x << endl;
}
};
int main()
{
Base p;
p.f(2);
p.f(0.25f);
return 0;
}
2.c++的覆盖
成员函数被重载的特征:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual关键字。
举例:
#include<iostream>
using namespace std;
class Base
{
public:
virtual void f(int x)
{
cout <<"base f(x) "<<x << endl;
}
};
class A:public Base
{
public:
virtual void f(int x)
{
cout <<"A f(x) "<<x << endl;
}
};
int main()
{
A q;
q.f(2);
return 0;
}
3.隐藏
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual
关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual
关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。
#include<iostream>
using namespace std;
class Base
{
public:
void f(int x)
{
cout <<"base f(x) "<<x << endl;
}
void g(double x)
{
cout <<"base g(x) "<<x << endl;
}
};
class A:public Base
{
public:
void f(double x)
{
cout <<"A f(x) "<<x << endl;
}
void g(double x)
{
cout <<"A g(x) "<<x << endl;
}
};
int main()
{
A q;
q.f(2.12f);
q.g(2.12f);
return 0;
}