C++函数重载,重写,重定义
笔者原创,转载请注明出处
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++函数重载,重写,重定义的更多相关文章
- c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义
4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...
- 重载重写重定义-易混淆概念-C++编译器处理方式
1.函数重载 1)必须在同一个类中进行. 2)子类无法重载父类的函数,父类同名函数将被名称覆盖 3)重载是在编译期间根据参数类型和个数决定函数调用 2.函数重写 1)必须发生于父类与子类之间 2)并且 ...
- C++ 重载 重写 重定义
重写:存在于类的继承,修饰符是virtual,函数的参数个数,顺序,类型,均相同. 重载:函数的参数列表,类型,顺序不相同. 重定义:对父类的函数进行屏蔽,参数列表可以不相同,没有virtual修饰
- C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖
学习C++必定会遇到重载.重写.重定义.概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了. 概念,特点: 重载: 直白点说就是函数名字相同,传参的个数,类型不一样.判断标准在于 ...
- C++ 虚函数及重载、重定义、重写
#include<iostream> usingnamespace std; class BASE { public: BASE()=default; BASE(int publicVal ...
- C++重写与重载、重定义
文章引用自:http://blog.163.com/clevertanglei900@126/blog/static/111352259201102441934870/ 重载overload:是函数名 ...
- (转)C++重写、重载和重定义的区别
C++ 重写重载重定义区别 (源自:http://blog.163.com/clevertanglei900@126/blog/static/111352259201102441934870/) 1 ...
- C++重写(覆盖)、重载、重定义、
总结: 重写(覆盖)override 是指派生类函数重写(覆盖)基类函数 不同的范围,分别位于基类和派生类中 函数的名字相同 参数相同 基类函数必须有virtual关键字 重载overload 成员函 ...
- C++重写(覆盖)、重载、重定义、多态
1 重写(覆盖)override override是重写(覆盖)了一个方法,以实现不同的功能.一般用于子类在继承父类时,重写(覆盖)父类中的方法.函数特征相同,但是具体实现不同. 重写需要注意: 被重 ...
- C++中重载、重定义、重写概念辨析
重载:函数名相同,函数的参数个数.参数类型或参数顺序三者中必须至少有一种不同.函数返回值的类型可以相同,也可以不相同.发生在一个类内部. 重定义:也叫做隐藏.覆盖,子类重新定义父类中有相同名称的非虚函 ...
随机推荐
- Spark SQL UDF示例
UDF即用户自定函数,注册之后,在sql语句中使用. 基于scala-sdk-2.10.7,Spark2.0.0. package UDF_UDAF import java.util import o ...
- 基于Filebeat+Kafka+Flink仿天猫双11实时交易额
1. 写在前面 在大数据实时计算方向,天猫双11的实时交易额是最具权威性的,当然技术架构也是相当复杂的,不是本篇博客的简单实现,因为天猫双11的数据是多维度多系统,实时粒度更微小的.当然在技术的总体架 ...
- JSP(一):JSP概要
问题: 在学习了 Servlet 之后,使用 Servlet 进行页面的展现,代码书写过于麻烦.极大的影响了开发的效率,那么有没有一种方式可以让我们像以前写网页一样来进行网页的编程工作呢? 解决: 使 ...
- 把我坑惨的一个update语句
最近好几次有开发同学在问我,比如下图: 问题归纳起来就是:在MySQL里面update一条记录,语法都正确的,但记录并没有被更新... 刚遇到这个问题的时候,我拿到这条语句直接在测试库里面执行了一把, ...
- 基于Cmake+QT+VS的C++项目构建开发编译简明教程
目录 一.工具下载与安装 1. Qt 2. Visual Studio 2015 3. Cmake 二.C++及Qt项目构建 1. 基于VS构建Qt项目 2. ...
- python vs vscode问题汇总
最近在学工程目录章节的时候遭遇了个把 vscode目录管理 造成的问题, 当然第一大原因是: 初学者使用vscode的时候没有将环境设置好..... 闹了好几天的脾气, 这两天才整理好..... 这事 ...
- 给树莓派开启samba服务
参考链接:https://www.cnblogs.com/mnstar/p/8144943.html 安装samba 和 samba-common-bin 启动树莓派以后,在命令行输入: sudo a ...
- Java的四种引用——强引用、软引用、弱引用、虚引用
目录 强引用 软引用 弱引用 虚引用 强引用 拥有强引用的对象永远不会被GC,可以根据引用的get方法获取到被引用对象 软引用 在内存充足的额时候,拥有软引用的对象不会被GC:即将内存溢出的时候,会对 ...
- Do-Now—团队冲刺博客三
Do-Now-团队 冲刺博客三 作者:仇夏 前言 不知不觉我们的项目已经做了三个多礼拜了,团队冲刺博客也写到了这第三篇,看着一个基本成型的APP安装在自己的手机上,一种喜悦感油然而生.好了,现在来看看 ...
- Android与ios 在input上的差异
input{ -webkit-appearance:none; }