1、重载(overload)

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

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

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

  • 函数名相同;

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

  • virtual关键字可有可无。

2、重写(overrid)

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

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

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

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

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

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

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

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

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

3、隐藏(hide, oversee)

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

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

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

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

悲歌可以当泣,

远望可以当归。

思念故乡,

郁郁累累。

欲归家无人,

欲渡河无船。

心思不能言,

肠中车轮转。

C++基础--重载、重写、隐藏的更多相关文章

  1. 【C++】三大概念要分清--重载,隐藏(重定义,覆盖(重写)

    { c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)} 重载 •  概念:在同一个作用域内:函数名相同,参数列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),返回值类 ...

  2. c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)

    重载,隐藏(重定义),覆盖(重写)—这几个名词看着好像很像,不过其实一样都不一样!! 综述: 说明:覆盖中的访问修饰符可以不同是指可以不用显示地用virtual:当访问修饰符改为const或者stat ...

  3. java的多态以及重载,重写,前期绑定,后期绑定

    多态的定义: 一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同内部结构的对象可以共享相同的外部接口.这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通 ...

  4. C++重载覆盖隐藏

    写一个程序,各写出重载覆盖 1 // // main.cpp // 2013-7-17作业2 // // Created by 丁小未 on 13-7-17. // Copyright (c) 201 ...

  5. C++中的重载,隐藏,覆盖,虚函数,多态浅析

    直到今日,才发现自己对重载的认识长时间以来都是错误的.幸亏现在得以纠正,真的是恐怖万分,雷人至极.一直以来,我认为重载可以发生在基类和派生类之间,例如: class A { public: void ...

  6. Java重载重写与实现方法的规则

    这几天在实训过程中做到了一个题,这个题目问的是 非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.这句话是错误的.然后在做错以后自己总结一下重载 重写 和实 ...

  7. 重载重写重定义-易混淆概念-C++编译器处理方式

    1.函数重载 1)必须在同一个类中进行. 2)子类无法重载父类的函数,父类同名函数将被名称覆盖 3)重载是在编译期间根据参数类型和个数决定函数调用 2.函数重写 1)必须发生于父类与子类之间 2)并且 ...

  8. java 方法的重载重写

    面向对象有三大特性:封装,继承,多态 多态则需要满足三大条件1要有继承2要有重写3父类引用子类对象 很多人对方法的重载重写有很大疑问,下面我来介绍一下方法的重载重写 方法重载就是方法名称重复,加载参数 ...

  9. 5、面向对象以及winform的简单运用(方法重载、隐藏、重写与虚方法)

    方法的重载: 规定一个方法可以具有不同的实现,但方法的名称是相同的.如: //同样是Man这个方法 public int Man(int age,int name) { …… } //重载 publi ...

随机推荐

  1. JS+ES6 - 向数组的开头添加一个或更多元素

  2. SpringBoot学习(学习过程记录)

    关于微服务和SOA 这,仅是我学习过程中记录的笔记.确定了一个待研究的主题,对这个主题进行全方面的剖析.笔记是用来方便我回顾与学习的,欢迎大家与我进行交流沟通,共同成长.不止是技术. 官网教程学习ht ...

  3. Quartz 调用

    讲解 在线Cron表达式 调用(DLL下载) static void Main(string[] args) { //1.任务调度调用 //开启任务,操作数据,然后将数据广播给指定用户 //Cron表 ...

  4. vue+ui

    一.elementui import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.u ...

  5. flower——知识总结

    创建主外键关联的话,外键表的外键字段一定要与主键表的主键字段相一致,包括字段类型,字段长度,字段符号等等 inverse="true" 将控制权交给对方,在一对多的关系中,一端控制 ...

  6. ArcoLinux安装完成后的的配置

    ArcoLinux安装完成后的的配置 这可能是全网第一篇Arcolinux的教程 1. 更改源 修改/etc/pacman.d/mirrorlist 在最头上增加清华源 Server = https: ...

  7. Linux添加虚拟内存 && 修改Linux系统语言

    Linux添加虚拟内存 首先执行free -h查看内存状况: total used free shared buff/cache available Mem: 1.8G 570M 76M 8.4M 1 ...

  8. P1044 火星数字

    P1044 火星数字 转跳点:

  9. 51nod 1352:集合计数

    1352 集合计数 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 给出N个固定集合{1,N},{2,N-1},{3,N-2},...,{N-1,2 ...

  10. Rails 第一课:环境配置 Ruby Rails RVM Heroku

    安装 上传专案到 Heroku 安装 Ruby 2.3.1 Rails 5.0.0.1 RVM 1.27.0 比较幸运一个问题都未碰到 MacOS 10.12.1 配置完成系统顺利升级到10.12.2 ...