博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅尝C++中重载、隐藏和覆盖
阅读量:4597 次
发布时间:2019-06-09

本文共 1321 字,大约阅读时间需要 4 分钟。

一、重载

  首先,对比C语言的函数,C++增加了重载(overloaded)、内联(inline)、const和virtual四种新机制,重载便是这四种新机制之一。类似自然语言,一词可以多义,在C++中,可以把语义、功能相似的几个函数用同一个名字表示,即函数重载。

  重载的实现:可以通过函数的参数实现重载。注意:区分函数是否重载只能通过函数的参数而不能仅仅靠返回值。因为在C/C++中函数的返回值可以被忽略。

  例如:void Function(void);

     int Function(void);

     通过int x = Function();

     这里即无法判断到底调用了哪个函数。

  注意:并不是函数名相同就构成了重载,全局函数和类成员函数的同名就不算重载,因为函数的作用域不同。

  如:void Print(...);

    class A

    {

      void Print(...);

    }

    函数的重载还应该注意的是发生隐式类型转换而导致二义性的产生。如下代码

#include
using namespace std;void output( int x); // 函数声明void output( float x); // 函数声明void output( int x){ cout << " output int " << x << endl ;}void output( float x){ cout << " output float " << x << endl ;}void main(void){ int x = 1; float y = 1.0; output(x); // output int 1 output(y); // output float 1 output(1); // output int 1 output(0.5); // error! ambiguous call, 因为自动类型转换 output(int(0.5)); // output int 0 output(float(0.5)); // output float 0.5}
View Code

二、覆盖

  覆盖是指派生类函数覆盖基类函数,特征是:

  1、不同的范围(分别位于派生类和基类);

  2、函数的名字相同;

  3、参数相同;

  4、基类函数必须有Virtual关键字

三、隐藏

  隐藏是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

  1、如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。(易与重载混淆)

  2、如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏。(易与覆盖混淆)

 

更多实例详见《高质量C++编程》

转载于:https://www.cnblogs.com/waiting-for/p/4332724.html

你可能感兴趣的文章
JEECG中t:dictSelect的extendJson用法
查看>>
web开发下的各种下载方法
查看>>
第六章 堆排序 6.5 优先队列
查看>>
Linux搭建我的世界服务器
查看>>
数据库之范式
查看>>
译文 [ROM][多国语言][2015.06.11] Lenovo S750 (MTK6589) - andrea_d86-lenovos750-4.2.2
查看>>
租用游艇问题
查看>>
如何修改SharePoint 2010默认的任务通知邮件的格式?
查看>>
单用户模式下连接被占用定位spid
查看>>
Django JWT
查看>>
云推送注意(MSDN链接)
查看>>
条件编译解决AutoCAD多版本问题
查看>>
java的Integer与int的比较
查看>>
openstack安装文档
查看>>
正在改变世界的硅谷创业趋势
查看>>
No2_3.接口继承多态_Java学习笔记_多态
查看>>
[转] 体内湿气重怎样祛除
查看>>
C#多线程学习(五) 多线程的自动管理(定时器)
查看>>
第三次作业
查看>>
物体坐标to世界坐标
查看>>