重载:

  重载是指在同一个作用域下,函数的函数名相同,但是函数参数的个数,或者参数的类型,参数的顺序不同。这时函数之间就构成了重载关系,这里需要注意的是,如果函数的参数列表完全相同,仅仅是返回值类型不同并不能构成重载。同一个作用域又怎么理解呢?在这里主要分两种情况讨论,一种是在类外但是函数在同一个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++中重载,重写,隐藏的区别的更多相关文章

  1. c++中 重载 覆盖 隐藏的区别 附加 mutable笔记

    成员函数被重载的特征有: 1) 相同的范围(在同一个类中): //2) 函数名字相同: 3) 参数不同: 4) virtual关键字可有可无. 覆盖的特征有: 1) 不同的范围(分别位于派生类与基类) ...

  2. C++中重载、重写(覆盖)和隐藏的区别实例分析

    这篇文章主要介绍了C++中重载.重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下 本文实例讲述了C++中重载.重写(覆盖)和隐藏的区别,对于C++面向对象程序设计 ...

  3. C# 中 重载,重写,隐藏的区别

    重载: 就是写多个同名方法,参数个数不同或类型不同或返回值不同 重写:子类中实现的方法必须加override关键词   普通非抽象父类需要virtual 抽象类里面抽象方法abstract 接口的实现 ...

  4. C++中重载、重写(覆盖)和隐藏的区别

    转载自:https://blog.csdn.net/zx3517288/article/details/48976097 基本概念: 重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个 ...

  5. c++ --> 重载、重写(覆盖)和隐藏的区别

    重载.重写(覆盖)和隐藏的区别 一.重载 重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心 ...

  6. C++概念分析之 重载、重写(覆盖)和隐藏的区别

    一.基本概念区别: 重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. 隐藏:是指派生类的函数屏蔽了与其 ...

  7. C++中重载、覆盖和隐藏的区别,以及适用场景

    一.重载.覆盖和隐藏的区别 二.适用场景 1.重载: 适用于不同的数据类型都需要使用到的功能函数.以数据相加的函数为例,可以在同一个文件内提供以下的重载函数以支持同样的功能: int add(int, ...

  8. java中重载和覆盖(又称重写)的区别

    初次见到这两个单词并没有什么特别的感觉,但是时间长了,却发现书上一会儿用override,一会儿又用overload,搞得我的迷迷糊.于是就做了个总结,希望能对和我一样对这两个概念模糊不清的网友有一个 ...

  9. Java中重载和重写的区别

    重载 overloading 1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载是一个类中多态性的一种表现. 2) Java的方法重载,就 ...

  10. java 中重载(Overload)和重写(Override)的区别

    首先重载和重写是应用于两个不同场景下面的两种不同的手段: 两者各自的特征: 重载(Overload):首先是位于一个类之中或者其子类中,具有相同的方法名,但是方法的参数不同,返回值类型可以相同也可以不 ...

随机推荐

  1. MyEclipse,Eclipse注释规范模板

    注释的作用:myeclipse中java文件头注释格式设置,最终可用于javadoc.exe生成API文档,同时提高了代码的可读性 设置方法: windows->preferences-> ...

  2. 洛谷 P1181,1182 数列分段Section

    数列分段Section I 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格 ...

  3. 关于Dubbo中一些小众但很实用的功能

    dubbo功能非常完善,很多时候我们不需要重复造轮子,下面列举一些你不一定知道,但是很好用的功能: 直连Provider 在开发及测试环境下,可能需要绕过注册中心,只测试指定服务提供者,这时候可能需要 ...

  4. bzoj2989

    坐标轴转化+cdq分治 我们发现那个绝对值不太好搞,于是我们把曼哈顿距离转为切比雪夫距离,x'=x-y,y'=x+y,这样两点之间距离就是max(|x1'-x2'|,|y1'-y2'|),这个距离要小 ...

  5. SpringBoot中使用spring-data-jpa 数据库操作(下)

  6. PCB 漏加阻抗条的臆想(转)

    阻抗条,我对你是有感情的,这你一定要相信我! 否则,不会在之前的每一次拼板,都不忘拥你入Panel之怀. 自做CAM开始,已记不清我们曾有多少次不期而遇, 我们一同迎接朝阳,送走晚霞,凝望窗外如洗的月 ...

  7. Akka源码分析-Cluster-Sharding

    个人觉得akka提供的cluster工具中,sharding是最吸引人的.当我们需要把actor分布在不同的节点上时,Cluster sharding非常有用.我们可以使用actor的逻辑标识符与ac ...

  8. 学习http协议的三次握手和四次挥手 ~~笔记

    http协议是基于tcp协议的  所以应该说是tcp协议的三次握手和四次挥手 SYN:请求建立连接,并在其序列号的字段进行序列号的初始值设定.建立连接,设置为1 FIN:用来释放一个连接.FIN=1表 ...

  9. ROS-URDF仿真

    前言:URDF (标准化机器人描述格式),是一种用于描述机器人及其部分结构.关节.自由度等的XML格式文件. 一.首先做一个带有四个轮子的机器人底座. 1.1 新建urdf文件 在chapter4_t ...

  10. srand()

    //第一次:5 0 第二次:5 16 srand(); //seed为常数,则每次运行产生的随机数一样 printf(); //产生的随机数都是一样的,都是5 srand(time(NULL)); p ...