C++中重载,重写,隐藏的区别
重载:
重载是指在同一个作用域下,函数的函数名相同,但是函数参数的个数,或者参数的类型,参数的顺序不同。这时函数之间就构成了重载关系,这里需要注意的是,如果函数的参数列表完全相同,仅仅是返回值类型不同并不能构成重载。同一个作用域又怎么理解呢?在这里主要分两种情况讨论,一种是在类外但是函数在同一个CPP文件中属于同一个作用域,另一种是在类中也属于同一个作用域。
函数在类外,但是同在一个CPP文件
//函数在类外,但是同在一个CPP文件 #include <iostream>
using namespace std; void test(int i) //函数1
{
cout << "int" << endl;
} void test(double i) //与函数1参数个数相同,参数类型不同,构成重载
{
cout << "double" << endl;
} void test(int i, int j) //与函数1参数类型相同,但是参数个数不同,构成重载
{
cout << "int int" << endl;
} int test(int i) //仅返回值类型不同,不能构成重载
{
cout << "return int" << endl;
}
函数在类内,这里有一种情况下也可以构成重载,函数名,参数列表完全相同,但是函数有const关键字修饰
//函数在同一个类中 #include <iostream>
using namespace std; class A
{
public:
A(){}
~A(){}; void test(int i) //函数1
{
cout << "int" << endl;
}
void test(double i)//与函数1参数个数相同,参数类型不同,构成重载
{
cout << "double" << endl;
}
void test(int i, int j)//与函数1参数类型相同,但是参数个数不同,构成重载
{
cout << "int int" << endl;
}
void test(int i) const //与函数1参数类型参数个数相同,有const 关键字修饰,构成重载
{
cout << "const int" << endl;
}
};
重写(覆盖):
重写也叫做覆盖,发生在父类和子类中,当父类中有虚函数时,在子类中重新定义一个与父类虚函数函数名,函数参数列表一模一样的函数,并重写函数的具体实现,此种情况就构成了重写。
//重写 #include <iostream>
using namespace std; class A
{
public:
A(){}
~A(){};
virtual void test()
{
cout << "A::test()" << endl;
}
}; class B :public A
{
public:
B(){}
~B(){}
virtual void test()//virtual关键字可写可不写
{
cout << "B::test()" << endl;
}
};
隐藏:
隐藏也发生在父类和子类中,主要包含两种情况:
1、子类和父类的函数名,参数类型完全相同,但是父类函数没有virtual关键字修饰
2、子类和父类函数名相同,但是参数列表不同,此时不管有没有virtual关键字修饰,都能构成隐藏
//子类和父类的函数名,参数类型完全相同,但是父类函数没有virtual关键字修饰 #include <iostream>
using namespace std; class A
{
public:
A(){}
~A(){};
void test()
{
cout << "A::test()" << endl;
}
}; class B :public A
{
public:
B(){}
~B(){}
void test()
{
cout << "B::test()" << endl;
}
};
//子类和父类函数名相同,但是参数列表不同,此时不管有没有virtual关键字修饰,都能构成隐藏 #include <iostream>
using namespace std; class A
{
public:
A(){}
~A(){};
void test(int i)
{
cout << "A::test()" << endl;
}
}; class B :public A
{
public:
B(){}
~B(){}
void test()
{
cout << "B::test()" << endl;
}
}; // 父类的 test函数需要传入一个int类型的参数,子类的test参数不需要传入任何参数,此时若有如下语句:
// B b;
// b.test(1); //报错
// 因为子类中的 void test() 函数已经把父类中的 void test(int i) 函数隐藏,这种方式下子类对象 b 并访问不到 void test(int i),此时可通过 b.A::test(1) 这种方式访问
C++中重载,重写,隐藏的区别的更多相关文章
- c++中 重载 覆盖 隐藏的区别 附加 mutable笔记
成员函数被重载的特征有: 1) 相同的范围(在同一个类中): //2) 函数名字相同: 3) 参数不同: 4) virtual关键字可有可无. 覆盖的特征有: 1) 不同的范围(分别位于派生类与基类) ...
- C++中重载、重写(覆盖)和隐藏的区别实例分析
这篇文章主要介绍了C++中重载.重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下 本文实例讲述了C++中重载.重写(覆盖)和隐藏的区别,对于C++面向对象程序设计 ...
- C# 中 重载,重写,隐藏的区别
重载: 就是写多个同名方法,参数个数不同或类型不同或返回值不同 重写:子类中实现的方法必须加override关键词 普通非抽象父类需要virtual 抽象类里面抽象方法abstract 接口的实现 ...
- C++中重载、重写(覆盖)和隐藏的区别
转载自:https://blog.csdn.net/zx3517288/article/details/48976097 基本概念: 重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个 ...
- c++ --> 重载、重写(覆盖)和隐藏的区别
重载.重写(覆盖)和隐藏的区别 一.重载 重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心 ...
- C++概念分析之 重载、重写(覆盖)和隐藏的区别
一.基本概念区别: 重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. 隐藏:是指派生类的函数屏蔽了与其 ...
- C++中重载、覆盖和隐藏的区别,以及适用场景
一.重载.覆盖和隐藏的区别 二.适用场景 1.重载: 适用于不同的数据类型都需要使用到的功能函数.以数据相加的函数为例,可以在同一个文件内提供以下的重载函数以支持同样的功能: int add(int, ...
- java中重载和覆盖(又称重写)的区别
初次见到这两个单词并没有什么特别的感觉,但是时间长了,却发现书上一会儿用override,一会儿又用overload,搞得我的迷迷糊.于是就做了个总结,希望能对和我一样对这两个概念模糊不清的网友有一个 ...
- Java中重载和重写的区别
重载 overloading 1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载是一个类中多态性的一种表现. 2) Java的方法重载,就 ...
- java 中重载(Overload)和重写(Override)的区别
首先重载和重写是应用于两个不同场景下面的两种不同的手段: 两者各自的特征: 重载(Overload):首先是位于一个类之中或者其子类中,具有相同的方法名,但是方法的参数不同,返回值类型可以相同也可以不 ...
随机推荐
- linux用于文件解压缩的命令
1 gzip gzip -<压缩率> 压缩率用数字(1-9)来表示,越大,则压缩率越大. 2 bz2 解压bz2 bzip2 -d filename.bz2
- Error处理: android.media.MediaRecorder.start(Native Method) 报错:start failed: -19【转】
本文转载自:http://blog.csdn.net/netwalk/article/details/17686993 Error处理: android.media.MediaRecorder.sta ...
- 【POJ 3352】 Road Construction
[题目链接] 点击打开链接 [算法] tarjan算法求边双联通分量 [代码] #include <algorithm> #include <bitset> #include ...
- POJ1279 Art Gallery 多边形的核
POJ1279 给一个多边形 求它的核的面积 所谓多边形的核 是多边形中的一个点集 满足其中的点与多边形边上的点的连线全部在多边形中 用多边形的每一条边所在的直线去切整个坐标平面 得到的一个凸包就是核 ...
- RDA PQ工具使用 (屏参调整)
使用客户规格书,制作屏参文件. 注意:,必填区和计算区,必填区根据屏参的SPEC填写,具体的屏参文件参数通过点击“Calc Sync”生成. 如:HV320WHB-N81的SPEC: 打开“Color ...
- IntelliJ IDEA 安装目录的核心文件讲解
转自:https://blog.csdn.net/qq_35246620/article/details/61916751 首先,我们回顾一下前两篇关于 IntelliJ IDEA 的博文的内容: 在 ...
- 4-2 买家类目-dao(下)
查询出来的对象ProductCategory就已经有updateTime和createTime了,然而你只是把对象的categoryType给修改了一下,修改之后就执行save方法保存了.所以它还是原 ...
- bzoj 2165: 大楼【Floyd+矩阵乘法+倍增+贪心】
1<<i的结果需要是long long的话i是long long是没用的--要写成1ll<<i--我别是个傻子吧 虽然写的是二进制贪心,但是我觉得二分可能更好写吧(但是会慢) ...
- spring 异常处理
1. 实现接口 HandlerExceptionResolver 捕获异常 2.@ExceptionHandler 在方法添加注解,捕获本地controller异常 3.@ControllerAdvi ...
- 2017 Pycharm激活码
BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...