重载 重写(覆盖) 隐藏

来源:互联网 发布:任天堂vr知乎 编辑:程序博客网 时间:2024/05/18 02:15

基本概念:

重载

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

重写(覆盖):

其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(返回值不同的协变返回类型也可以构成重载)。两个方法分别位于派生类与基类基类函数必须有 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重载

原创粉丝点击