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):首先是位于一个类之中或者其子类中,具有相同的方法名,但是方法的参数不同,返回值类型可以相同也可以不 ...
随机推荐
- mysql对表列数和行大小的限制
mysql对表列数和行大小的限制 - CSDN博客 https://blog.csdn.net/Dr_Joseph/article/details/78111312
- Ubuntu 安装Consolas字体
下载 YaHei.Consolas https://code.google.com/p/uigroupcode/downloads/list 安装 1.创建文件夹 sudo mkdir -p /usr ...
- 蓝书2.4 AC自动机
T1 玄武密码 bzoj 4327 题目大意: 一些字符串 求这些字符串的前缀在母串上的最大匹配长度是多少 思路: 对于所有串建立AC自动机 拿母串在自动机上匹配 对所有点打标记 以及对他们的fail ...
- linux shell 实例1
UI项目删除“UIL”文件中的无用字串: 脚本需要制定UIL文件目录位置&无用字串的txt文件,如删除海尔目录下的无用字串: ./delete_uil_string.sh ./haier/UI ...
- Linux-----Kconfig文件的简介
内核源码树的目录下都有两个文件Kconfig和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库, 每个Kconfig分别描述了所属目录源文件相关的内核配置菜单.在内核配置 ...
- uva1563
https://vjudge.net/problem/UVA-1563 高斯消元解同余方程组 就是把原来的除法换成逆元,其他的都一样 #include<bits/stdc++.h> usi ...
- navicat导入.sql文件出错2006-MySQLserver has gone away
方式一(验证无误): 找到mysql安装目录下的my.ini配置文件,加入以下代码: max_allowed_packet=500M wait_timeout=288000 interactive_t ...
- 【410】Linux 系统 makefile 文件
makefile 主要是用来合并编译文件 CC = gcc puzzle: puzzle.c boardADT.o $(CC) puzzle.c boardADT.o -o puzzle -lm bo ...
- 10.13NOIP模拟题
/* 容斥原理 考虑到a[i]要么不会太大,要么就对答案贡献很小 dfs即可 */ #include<bits/stdc++.h> #define ll long long #define ...
- KMP POJ 2406 Power Strings
题目传送门 /* 题意:一个串有字串重复n次产生,求最大的n KMP:nex[]的性质应用,感觉对nex加深了理解 */ /************************************** ...