笔者原创,转载请注明出处

  C++中经常会提到重载,除了重载,还有重写,重定义,下面对这三个概念逐一进行区分

1 重载

  函数重载是同一定义域中(即同一个类中)的同名函数,但形参的个数必须不同,包括参数个数,类型和顺序,不能仅通过返回值类型的不同来重载函数

#include<iostream>
using namespace std; class BOX
{
void func(int a, int b, int c){} void func(int a, int b){} // 参数个数不同 void func(int c, int b, int a){} // 参数顺序不同 int func(int a, int b, int c){} // **返回值类型不同,不能说明是重载函数**
}; int main()
{
BOX box; return 0;
}

2 重写

  在父类和子类中,并且函数形式完全相同,包括返回值,参数个数,类型和顺序

  父类中有vietual关键字,可以发生 多态

#include<iostream>
using namespace std; class BOX
{
virtual void func(int a, int b, int c = 0) // 函数重写
{ } }; class squareBox: public BOX
{
void func(int a, int b, int c = 0)
{ }
}; int main()
{
BOX box; return 0;
}

3 重定义

  重定义和函数重写类似,不同的地方是重定义父类中没有vietual关键字,不可以发生 多态

#include<iostream>
using namespace std; class BOX
{
void func(int a, int b, int c = 0) //**没有virtual关键字,函数重定义**
{ } }; class squareBox: public BOX
{
void func(int a, int b, int c = 0)
{ }
}; int main()
{
BOX box; return 0;
}

4 函数重载二义性

  当函数重载遇上默认参数时,会出现二义性

  如下代码所示:

#include<iostream>
using namespace std; class BOX
{
void func(int a, int b, int c = 0)
{ } void func(int a, int b)
{ }
}; int main()
{
BOX box;
box.func(1, 2); // **此函数不知道调用上面哪一个** return 0;
}

此博文随着笔者的学习会持续更新

如有错误之处,敬请指正,万分感谢!

C++函数重载,重写,重定义的更多相关文章

  1. c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义

    4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...

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

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

  3. C++ 重载 重写 重定义

    重写:存在于类的继承,修饰符是virtual,函数的参数个数,顺序,类型,均相同. 重载:函数的参数列表,类型,顺序不相同. 重定义:对父类的函数进行屏蔽,参数列表可以不相同,没有virtual修饰

  4. C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖

    学习C++必定会遇到重载.重写.重定义.概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了. 概念,特点: 重载: 直白点说就是函数名字相同,传参的个数,类型不一样.判断标准在于 ...

  5. C++ 虚函数及重载、重定义、重写

    #include<iostream> usingnamespace std; class BASE { public: BASE()=default; BASE(int publicVal ...

  6. C++重写与重载、重定义

    文章引用自:http://blog.163.com/clevertanglei900@126/blog/static/111352259201102441934870/ 重载overload:是函数名 ...

  7. (转)C++重写、重载和重定义的区别

    C++ 重写重载重定义区别 (源自:http://blog.163.com/clevertanglei900@126/blog/static/111352259201102441934870/) 1 ...

  8. C++重写(覆盖)、重载、重定义、

    总结: 重写(覆盖)override 是指派生类函数重写(覆盖)基类函数 不同的范围,分别位于基类和派生类中 函数的名字相同 参数相同 基类函数必须有virtual关键字 重载overload 成员函 ...

  9. C++重写(覆盖)、重载、重定义、多态

    1 重写(覆盖)override override是重写(覆盖)了一个方法,以实现不同的功能.一般用于子类在继承父类时,重写(覆盖)父类中的方法.函数特征相同,但是具体实现不同. 重写需要注意: 被重 ...

  10. C++中重载、重定义、重写概念辨析

    重载:函数名相同,函数的参数个数.参数类型或参数顺序三者中必须至少有一种不同.函数返回值的类型可以相同,也可以不相同.发生在一个类内部. 重定义:也叫做隐藏.覆盖,子类重新定义父类中有相同名称的非虚函 ...

随机推荐

  1. STL 贺习笔记

    贺文链接www.cnblogs.com/zhouzhendong/p/STL.html C++ STL 的一些基础用法 前言 ​ 创建一个空的 vector ,我一直是这样写的: vector < ...

  2. afx.h(78): fatal error C1083: 无法打开包括文件: “new.h”: No such file or directory

    vs2015新建mfc工程,编译错误: D:\program files (x86)\microsoft visual studio 14.0\vc\atlmfc\include\afx.h(78): ...

  3. CodeForces 510C Fox And Names (拓扑排序)

    <题目链接> 题目大意: 给你一些只由小写字母组成的字符串,现在按一定顺序给出这些字符串,问你怎样从重排字典序,使得这些字符串按字典序排序后的顺序如题目所给的顺序相同. 解题分析:本题想到 ...

  4. vimtutor——vim官方教程

    =============================================================================== =      欢     迎     阅 ...

  5. linux仅修改文件夹权限 分别批量修改文件和文件夹权限

    比如我想把/var/www/html下的文件全部改成664,文件夹改成775,怎么做呢 方法一: 先把所有文件及文件夹改成664,然后把所有文件夹改成775 chmod -R 664 ./ find ...

  6. http 缓存学习.

    mark 一下 HTTP 缓存机制一二三 http://web.jobbole.com/92773/ 彻底弄懂HTTP缓存机制及原理 https://www.cnblogs.com/chenqf/p/ ...

  7. vue Error: No PostCSS Config found in

    最近在做一个vue的移动端的项目,遇到一个问题,我本地的项目运行正常,可是上传到github上的一启动就报错,就是标题上的错误,找了很久,刚开始以为是某个css没有配置,就把本地的复制过去还是报错,无 ...

  8. spring ref &history&design philosophy

    Spring Framework Overview Spring是开发java application的通用框架,分为多个模块(modules),核心是core container,包括configu ...

  9. git教程——工作流程

    Git 工作流程 本章节我们将为大家介绍 Git 的工作流程. 一般工作流程如下: 克隆 Git 资源作为工作目录. 在克隆的资源上添加或修改文件. 如果其他人修改了,你可以更新资源. 在提交前查看修 ...

  10. antd-mobile less文件用模块方式引入

      config-overrides.js文件修改::::: const { injectBabelPlugin, getLoader } = require('react-app-rewired') ...