C++基础--重载、重写、隐藏

 

1、重载(overload)

重载的概念是在同一作用域内函数名相同,函数输入参数个数、数据类型不同,但是不能是函数名、参数个数、数据类型完全相同但返回值不同的情况。最直接的例子是常见的构造函数重载,在写一个类的时候可能会出现多个构造函数,每个构造函数的输入参数是不一样的,有无输入参数的默认构造函数,也有带参的构造函数。

所以,重载的特点总结为:

  • 在同一作用域(比如同一类中的成员函数);

  • 函数名相同;

  • 参数列表不同(参数个数或者参数数据类型)

  • virtual关键字可有可无。

2、重写(overrid)

重写也叫覆盖,重写要求子类继承父类的virtual修饰的方法并重写函数定义,这个一般情况都要求函数名返回值参数列表必须完全相同。关于返回值,可以是这几种情况:

  • 与基类的虚函数有相同的返回类型;

  • 或者与基类虚函数的相同;

  • 或者都返回指针(或引用),并且派生类虚函数所返回的指针(或引用)类型是基类中被替换的虚函数所返回的指针(或引用)类型的子类型(派生类型)。

所以,重写的特点可以归纳为:

  • 不同作用域(子类和父类);

  • 函数完全一样(一样的函数名、返回值和参数列表);

  • 父类的函数声明必须用virtual修饰;

关于重写还有个可能不太一般的情况,就是子类重写了父类虚函数,函数名和参数列表都一样,但是返回值不一样,比如父类返回的是父类的指针或者引用,子类返回的是子类的指针或者引用,这个情况叫协变,这个也属于重写。

3、隐藏(hide, oversee)

隐藏跟重载和重写有点混淆,但是不一样。隐藏是子类与将父类的成员函数同名,将父类的成员函数屏蔽,出现屏蔽的条件是:

  • 子类和父类函数的参数列表相同,但是父类的成员函数没有virtual修饰(这个对比重写);

  • 子类和父类函数的参数列表不同,这时不管父类的函数是不是虚函数都屏蔽(这个对比重载);

关于重写涉及到一个虚函数的概念,这一篇不讲,下一篇再介绍。

 

悲歌可以当泣,

远望可以当归。

思念故乡,

郁郁累累。

欲归家无人,

欲渡河无船。

心思不能言,

肠中车轮转。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值