基本概念:
重载
在一个类中被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确 定调用哪个函数,重载不关心函数返回类型。
重写(覆盖):
其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(返回值不同的协变返回类型也可以构成重载)。
两个方法分别位于派生类与基类
基类函数必须有 virtual 关键字,不能有 static ;子类方法有无virtual方法没影响。
隐藏
两个方法分别位于派生类与基类
函数名字相同,返回值可以不相同
参数不同,基类的函数不论有没 virtual 关键字都将被隐藏(注意只要同名函数,不管参数列表是否相同,基类函数都会被隐藏)
参数相同,但是基类函数没有 virtual关键字,那么基类的方法将被隐藏(注意和重写的区别)
#include <iostream>
using namespace std;
class Base
{
public:
void fun(double ,int ){ cout << "Base::fun(double ,int )" << endl; }
};
class Derive : public Base
{
public:
void fun(int ){ cout << "Derive::fun(int )" << endl; }
};
int main()
{
Derive pd;
pd.fun(1);
pb.fun(0.01, 1);
system("pause");
return 0;
}
函数重写(override)与协变返回类型(covariant return type)
const重载