c++重载、重写、遮蔽
一、重载
函数重载是指两个函数的函数名相同,但是函数的参数个数或参数类型不同。函数重载可发生在顶层函数或同一个类中,不需要构成继承关系。是在编译期绑定,并不属于多态。
class base
{
public:
base();
base(int a);
base(int a,int b);
base(base&);
int fun(int a);
int fun(double a);
int fun(int a,int b);
private:
int x;
int y;
}
int g(int a);
int g(double a);
int g(int a,int b);
函数重载的规则:
- 函数名称必须相同。
- 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
- 函数的返回类型可以相同也可以不相同。
- 仅仅返回类型不同不足以成为函数的重载。
二、重写
重写又称覆盖,是构成多态的条件。
函数重写的规则:
- 要有继承关系
- 构成继承关系的两个类中必须有相同函数名的成员函数
- 这两个成员函数必须是虚函数
这时我们通过基类的指针或引用来调用虚成员函数就会形成多态。
#include<iostream>
using namespace std;
class base
{
public;
virtual void vir1(){}
virtual void vir2(){}
};
class derived : public base
{
public:
void vir1(){}
voide vir2(){}
};
int main()
{
base *p;
p = new derived ;
p->vir1();
p->vir2();
delete p;
return 0;
}
三、遮蔽
函数遮蔽要求构成继承关系,这两个类中具有相同函数名的函数,如果这两个函数不构成覆盖关系,就构成了遮蔽关系。