重载 重写(覆盖) 隐藏

基本概念:

重载

在一个类中被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确   定调用哪个函数,重载不关心函数返回类型。

重写(覆盖):

其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(返回值不同的协变返回类型也可以构成重载)。
两个方法分别位于派生类与基类
基类函数必须有 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);//Derive::fun(int )
    pb.fun(0.01, 1);//error C2660: “Derive::fun”: 函数不接受 2 个参数

    system("pause");
    return 0;
}

函数重写(override)与协变返回类型(covariant return type)

const重载

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章