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

  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. python设计模式---行为型之观察者模式

    比较常用咯~~ from django.test import TestCase from abc import ABCMeta, abstractmethod # 行为型设计模式---观察者模式 c ...

  2. C# Winform无边框窗口拖动

    Windows 的 API 代码如下: [DllImport("user32.dll")] public static extern bool ReleaseCapture(); ...

  3. js常见的面试题

    css 选择符有哪些 通配选择符 *类选择符 classid选择符 id属性选择符 input[name=button]包含选择符 类似 div span子对象选择符 类似 div > span ...

  4. 自己动手写Redis客户端- Redis协议(1)

    网络层 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 . 客户端和服务器发送的命令或数据一律以 \r\n (CRLF)结尾. 请求 Redis 服务器接受命令以及命 ...

  5. systemd-unit

    参考:   systemd unit 中文手册

  6. scss/less语法以及在vue项目中的使用(转载)

    1.scss与less都是css的预处理器,首先我们的明白为什么要用scss与less,因为css只是一种标记语言,其中并没有函数变量之类的,所以当写复杂的样式时必然存在局限性,不灵活,而scss与l ...

  7. UOJ#374. 【ZJOI2018】历史 贪心,LCT

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ374.html 题解 想出正解有点小激动. 不过因为傻逼错误调到自闭.不如贺题 首先我们考虑如何 $O(n ...

  8. 分布式缓存技术之Redis_03分布式redis

    目录 1. Redis集群 集群作用 主从复制 集群安装配置 集群数据同步及原理 2. Redis哨兵机制 master选举 哨兵sentinel的作用 哨兵sentinel之间的相互感知 maste ...

  9. Vue+localstrong登录注册,并保持登录状态

    在router.js中添加meta区分 比如登录注册页面,不需要登录即可进入,那么我们把meta中的isLogin标志设置为false { //登录 path: '/login', component ...

  10. Navicat Premium 12.1.11.0安装与激活

    本文介绍Navicat Premium 12.1.11.0的安装.激活与基本使用. 博主所提供的激活文件理论支持Navicat Premium 12.0.x系列和Navicat Premium 12. ...