C++基础--重载、重写、隐藏
1、重载(overload)
重载的概念是在同一作用域内,函数名相同,函数输入参数个数、数据类型不同,但是不能是函数名、参数个数、数据类型完全相同但返回值不同的情况。最直接的例子是常见的构造函数重载,在写一个类的时候可能会出现多个构造函数,每个构造函数的输入参数是不一样的,有无输入参数的默认构造函数,也有带参的构造函数。
所以,重载的特点总结为:
在同一作用域(比如同一类中的成员函数);
函数名相同;
参数列表不同(参数个数或者参数数据类型)
virtual关键字可有可无。
2、重写(overrid)
重写也叫覆盖,重写要求子类继承父类的virtual修饰的方法并重写函数定义,这个一般情况都要求函数名、返回值和参数列表必须完全相同。关于返回值,可以是这几种情况:
与基类的虚函数有相同的返回类型;
或者与基类虚函数的相同;
或者都返回指针(或引用),并且派生类虚函数所返回的指针(或引用)类型是基类中被替换的虚函数所返回的指针(或引用)类型的子类型(派生类型)。
所以,重写的特点可以归纳为:
不同作用域(子类和父类);
函数完全一样(一样的函数名、返回值和参数列表);
父类的函数声明必须用virtual修饰;
关于重写还有个可能不太一般的情况,就是子类重写了父类虚函数,函数名和参数列表都一样,但是返回值不一样,比如父类返回的是父类的指针或者引用,子类返回的是子类的指针或者引用,这个情况叫协变,这个也属于重写。
3、隐藏(hide, oversee)
隐藏跟重载和重写有点混淆,但是不一样。隐藏是子类与将父类的成员函数同名,将父类的成员函数屏蔽,出现屏蔽的条件是:
子类和父类函数的参数列表相同,但是父类的成员函数没有virtual修饰(这个对比重写);
子类和父类函数的参数列表不同,这时不管父类的函数是不是虚函数都屏蔽(这个对比重载);
关于重写涉及到一个虚函数的概念,这一篇不讲,下一篇再介绍。
悲歌可以当泣,
远望可以当归。
思念故乡,
郁郁累累。
欲归家无人,
欲渡河无船。
心思不能言,
肠中车轮转。
C++基础--重载、重写、隐藏的更多相关文章
- 【C++】三大概念要分清--重载,隐藏(重定义,覆盖(重写)
{ c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)} 重载 • 概念:在同一个作用域内:函数名相同,参数列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),返回值类 ...
- c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)
重载,隐藏(重定义),覆盖(重写)—这几个名词看着好像很像,不过其实一样都不一样!! 综述: 说明:覆盖中的访问修饰符可以不同是指可以不用显示地用virtual:当访问修饰符改为const或者stat ...
- java的多态以及重载,重写,前期绑定,后期绑定
多态的定义: 一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同内部结构的对象可以共享相同的外部接口.这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通 ...
- C++重载覆盖隐藏
写一个程序,各写出重载覆盖 1 // // main.cpp // 2013-7-17作业2 // // Created by 丁小未 on 13-7-17. // Copyright (c) 201 ...
- C++中的重载,隐藏,覆盖,虚函数,多态浅析
直到今日,才发现自己对重载的认识长时间以来都是错误的.幸亏现在得以纠正,真的是恐怖万分,雷人至极.一直以来,我认为重载可以发生在基类和派生类之间,例如: class A { public: void ...
- Java重载重写与实现方法的规则
这几天在实训过程中做到了一个题,这个题目问的是 非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.这句话是错误的.然后在做错以后自己总结一下重载 重写 和实 ...
- 重载重写重定义-易混淆概念-C++编译器处理方式
1.函数重载 1)必须在同一个类中进行. 2)子类无法重载父类的函数,父类同名函数将被名称覆盖 3)重载是在编译期间根据参数类型和个数决定函数调用 2.函数重写 1)必须发生于父类与子类之间 2)并且 ...
- java 方法的重载重写
面向对象有三大特性:封装,继承,多态 多态则需要满足三大条件1要有继承2要有重写3父类引用子类对象 很多人对方法的重载重写有很大疑问,下面我来介绍一下方法的重载重写 方法重载就是方法名称重复,加载参数 ...
- 5、面向对象以及winform的简单运用(方法重载、隐藏、重写与虚方法)
方法的重载: 规定一个方法可以具有不同的实现,但方法的名称是相同的.如: //同样是Man这个方法 public int Man(int age,int name) { …… } //重载 publi ...
随机推荐
- 4.RabbitMQ 4种交换模式
请看 demo https://github.com/kevin-li-06/eshop.git
- VUE- 访问服务器端数据 axios
VUE- 访问服务器端数据 axios 一,安装 npm install axios 二,在http.js中引入 import axios from 'axios'; 三,定义http request ...
- 盘姬工具箱WV1.10
========================================================================== {盘姬工具箱CruiserEXPforWin版是一 ...
- SpringBoot-属性文件properties形式
SpringBoot-属性文件properties形式 上述使用JavaBean的配置可以实现数据源的配置,但是如果配置文件中的内容需要被多次调用就没那么方便了,所以我们学习新的方法,将Propert ...
- pyhton matplotlib可视化图像基础(二维函数图、柱状图、饼图、直方图以及折线图)
//2019.07.22pyhton中matplotlib模块的应用pyhton中matplotlib是可视化图像库的第三方库,它可以实现图像的可视化,输出不同形式的图形1.可视化图形的输出和展示需要 ...
- 启动Eureka出现错误:Archive for required library in project cannot be read or is not a valid ZIP file
To fix issues like that, let Maven download the files again: Delete the folder D:/mypath/.m2/reposit ...
- DIV 透明度 设置
filter:alpha(opacity=70); -moz-opacity:0.70;-khtml-opacity: 0.70; opacity: 0.70;
- UVA - 1572 Self-Assembly(图论模型+拓扑排序)
题意:判断利用给出的正方形是否能拼接出无限延伸的结构. 分析:正方形上的字母看做点,正方形看做有向边. 例如: 若上下两个正方形能拼接,需要B+~C+是个有向边. 对输入的处理是:把A+,A-分别映射 ...
- 【ABP】从零开始学习ABP_入门介绍
本文介绍自己入坑ABP的过程,一些ABP的相关文章.QQ群,以及ABP Zero示例项目的运行. 背景 作为一个半路出家学习编程的新人,之前工作中也断断续续写过一些代码,但底层核心一直没机会学习,所以 ...
- CSS - 强制换行和禁止换行强制换行 和禁止换行样
强制换行 word-break: break-all; 只对英文起作用,以字母作为换行依据. word-wrap: break-word; 只对英文起作用,以单词作为换行依据. whi ...