成员函数的重载,覆盖和隐藏

C++中成员函数的重载、覆盖与隐藏 成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual关键字可有可无。 覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有virtual关键字。 隐藏是指派生类的函数屏蔽了与其同名的基类函数,规则如下: (1)如果派生类的函数... 阅读详情

什么是函数重载:
在C++程序中,可以将语义,功能相似的函数用同一个名字表示,即就是函数重载。

函数重载的原因:
(1)便于记忆,提高函数的易用性;
(2)类的构造函数需要重载机制;(因为c++规定构造函数与类同名,构造函数只能有一个名字,若要有不同的方法创建对象,只能依靠重载)

成员函数被重载的特征:
(1)在同一个类范围内;
(2)函数的名字相同;
(3)函数的参数不同;
(4)virtual关键字可有可无;
eg:

#include <iostream>

using namespace std;

class base
{
public:
    base(){}
    ~base(){}
public:
    void fun()
    {
        cout<<"base::fun()"<<endl;
    }
    void fun(int x)
    {
        cout<<"base::fun(int)"<<endl;
    }
private:
    int data;
};

int main()
{
    base b;
    b.fun();
    b.fun(8);
    return 0;
}

测试结果:
此处的base中的fun()和fun(int)构成了函数重载;

[root@localhost C++]# vim test.cpp
[root@localhost C++]# g++ test.cpp -o test
[root@localhost C++]# ./test 
base::fun()
base::fun(int)
[root@localhost C++]# 

注意:要防止隐式类型转换;
eg:

void fun(int){}
void fun(float){}
当传入参数是0.5时编译器会因为隐式类型转换而不知道要调用哪一个函数,所以要进行显示调用即:
fun(int(0.5));
或
fun(float(0.5));

成员函数的覆盖:
(覆盖是指派生类函数覆盖基类函数)
覆盖的特征:
(1)分别位于派生类和基类范围;
(2)函数名字相同;
(3)函数的参数相同;
(4)基类函数必须有virtual关键字

eg:

#include <iostream>

using namespace std;

class base
{
public:
    base(){}
    ~base(){}
public:
    virtual void fun()
    {
        cout<<"base::fun()"<<endl;
    }
private:
    int data;
};

class D : public base
{
public:
    D(){}
    ~D(){}
public:
    void fun()
    {
        cout<<"D::fun()"<<endl;
    }
};


int main()
{
    D d;
    d.fun();
    return 0;
}

此处的D中的fun()函数覆盖了父类base中的fun()函数;
若父类中的fun()函数没有关键字virtual,main()中调用的就是base中的fun()函数;加了virtual关键字父类的fun()函数被虚拟继承,就只能调用D自己的fun()函数;

成员函数的隐藏:
(隐藏是指派生类的函数屏蔽了与其同名的基类函数)
隐藏的特征:
(1)若派生类的函数与基类的函数同名,但是参数不同,则无论基类的函数有无virtual关键字,基类函数都将被隐藏;
(2)若派生类的函数与基类的函数同名同参,并且基类函数**有无
virtual**关键字,基类函数将被隐藏;

第(1)种

#include <iostream>

using namespace std;

//父类base::fun()没有virtual关键字,但和子类D::fun()同名,不同参,因此父类的fun()函数被隐藏;

class base
{
public:
    base(){}
    ~base(){}
public:
    void fun()
    {
        cout<<"base::fun()"<<endl;
    }
private:
    int data;
};

class D : public base
{
public:
    D(){}
    ~D(){}
public:
    void fun(int)
    {
        cout<<"D::fun(int)"<<endl;
    }
};


int main()
{
    D d;
    d.fun(3);
    return 0;
}

测试结果如下:

[root@localhost C++]# ./test 
D::fun(int)
[root@localhost C++]# 

第(2)种

#include <iostream>

using namespace std;

//父类base::fun()
与子类D::fun()同名同参,所以父类的fun()函数被隐藏

class base
{
public:
    base(){}
    ~base(){}
public:
    virtual void fun()
    {
        cout<<"base::fun()"<<endl;
    }
private:
    int data;
};

class D : public base
{
public:
    D(){}
    ~D(){}
public:
    void fun()
    {
        cout<<"D::fun()"<<endl;
    }
};


int main()
{
    D d;
    d.fun();
    return 0;
}

测试结果如下:

[root@localhost C++]# g++ test.cpp -o test
[root@localhost C++]# ./test 
D::fun()
[root@localhost C++]# 
白鲸优化算法(BWO)详解:从生物灵感 to 工程实践 白鲸优化算法(BWO)是一种新型的群体智能优化算法,模拟白鲸的游泳、捕食和鲸落行为。该算法通过平衡因子控制探索与开发阶段的转换:探索阶段采用正弦/余弦函数模拟白鲸的同步游泳,开发阶段引入莱维飞行增强局部搜索,鲸落阶段通过随机更新避免局部最优。BWO具有参数少、实现简单、收敛速度快等优点,已在多个优化问题上展现出优异性能。其数学模型将白鲸的三种核心行为抽象为位置更新公式,实现了全局搜索与局部开发的自然平衡。 阅读详情

相关推荐

利用正射影像对斜射图像进行反向投影

因此,RANSAC算法可以通过计算inliners和outliers的数量来评估估计关键点的质量,确保与其他点不一致的点不会在Homography矩阵中被估计。然后,它通过考虑关键点周围区域中图像的梯度大小和方向来计算每个提取的关键点的方向。由于单应性矩阵的计算可能会受到两个图像中异常值的存在的影响,这将导致矩阵的不正确估计并导致沿图像的对准和映射不良。FLANN匹配器的方法基于K近邻搜索的概念,即从图像中找到k个近邻。找到相机在正射影像坐标系中的位置并在正射影像上绘制重叠区域的边界框。

gis收藏家的博客 1511

C++中类成员函数的重载、覆盖和隐藏的区别,超清楚!

转载:https://www.cnblogs.com/liubo1/p/5925746.html 1.成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。 2.覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4......

魏波 6435

lvgl 实现表格table,并且固定表头

嵌入式实现table,lvgl 实现原生表格table组件

m0_61704502的博客 1271

C/C++面试:成员函数的重载、继承、覆盖、隐藏

http://www.techweb.com.cn/network/system/2017-06-24/2542705.shtml 1、成员函数的重载 1.1、C++中的成员函数有4种,分别是普通成员函数,virtual虚函数,const成员函数。 void func(int a) virtual void func(int a); void func(int a) const; 如果在...

OceanStar的博客 7938

ROS2 -Jazzy 一步一步(第一步_工作空间以及编译)

文件夹作用特点是否需要手动创建/维护src存放自己写的 ROS 2 包一个 workspace 可以有多个包需要手动创建build保存编译过程中的中间文件每个包生成对应子目录自动生成,可删除install保存编译完成后的功能包每个包有独立子目录,含可执行文件自动生成,可删除log保存编译日志用于查看错误原因、调试自动生成,不需修改colcon是 ROS 2 推荐使用的构建工具自动处理功能包的依赖和编译顺序一条命令就能编译整个工作空间。

jerrykorea的博客 1380

linux入侵排查-综合日志分析

2.分析攻击者首次成功登录web管理后台的时间 还可以知道攻击者可能是通过10.2.4.11这个跳板服务器跳过来的,然后我们继续排查,可以发现日志中POST请求大多都是1047字节,然后往后大多是300字节,POST请求的响应状态码有200和302这两个,其中的302是爆破成功后持续爆破产生的日志,再1047字节和300字节中间夹着一个978字节,就是200响应和302响应的中间。7.分析攻击者留下的持久化后门的时间和后门执行情况 排查计划任务,发现有一个计划任务还是被加密的,应该是反弹shell的。

chinese_cabbage0的博客 642

C++ 成员函数的重载,继承,覆盖和隐藏

一、 C++成员函数的重载 C++中的成员函数有四种,分别是普通成员函数,virtual虚函数,const成员函数。 (1) void func(int a); (2) virtual void func(int a); (3) void func(int a) const; 如果在一个类中,声明这四种函数,哪是重复定义?哪些是重载? 其中(1)(2)是重复定义,故编译不能通过,而(3)与(1)(2)是不同类型的函数,是重载。 成员函数被重载的特征是: (1)具有相同的作用域(即同一个类...

heima201907的博客 603

深入解析Dataloader中shuffle机制与随机种子对模型训练的影响

本文深入探讨了Dataloader中shuffle机制与随机种子对机器学习模型训练的影响。通过实际案例分析,详细解释了数据打乱顺序的必要性、随机种子的正确设置方法以及两者协同工作的原理,帮助开发者避免常见陷阱并提升模型训练效果。

weixin_29166013的博客 141

成员函数的重载、覆盖与隐藏(详细)

成员函数的重载、覆盖与隐藏 成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。 重载与覆盖 成员函数被重载的特征: (1)相同的范围(在同一个类中) (2)函数名字相同 (3)参数不同 (4)virtual 关键字可有可无 覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分...

李政的博客 4409

别再乱调栅极电阻了!手把手教你用示波器调试FOC驱动MOS管,避开EMC和震荡坑

本文详细介绍了FOC驱动中MOS管栅极参数的精准调试方法,涵盖示波器配置、波形特征分析及栅极电阻选型策略。通过实战案例和工程经验,帮助工程师有效解决EMC和震荡问题,提升驱动电路稳定性和效率。

weixin_28728495的博客 502

量产导入 | 产品可靠性测试标准完整大集合(JEDEC/IEC/SAE…)

产品可靠性测试是产品质量保证中的重要一环, 包含有Pre-con, aging(寿命)和ESD(静电)等, 下面就收集了权威标准JEDEC全系列, 请参照如下 同时也附上其它的可靠性标准供大家参考及交叉理解, 可能侧重点不同, 大家可以参考下。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1660

[C++]C++ 成员函数的重载继承覆盖和隐藏

在调用pBase->f(5)时,首先要去pBase类中找到对应需要执行的函数,因为Base类中有两个函数virtual void f(int a) 和 void f(double)重载,因为该实参是5,为int类型,所以要调用virtual void f(int a)函数,因为该f(int a)是一个虚函数,所以再去判断pBase所指向的具体对象,具体对象为Derived子类,再去Derived子类的虚函数表中找到void f(int a)函数。从成员函数的重载特征中,可以知道(1)(2)是重复定义。

FL1768317420的博客 1105

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【C++】成员函数的重载、覆盖和隐藏

我们在学习C++中总会有很多概念容易搞混,其中成员函数的重载、覆盖和隐藏这三个概念就经常让很多人头大。 下面我们就来介绍一下这三个的区别: 成员函数被重载的条件是: (1)相同的范围也就是要在同一个类中 (2)函数名字相同 (3)参数不同(这里包括参数类型,参数的顺序,参数的个数) (4)virtual关键字可有可无 覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围也就是...

如风逝去 300

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++中成员函数的重载、覆盖和隐藏的区别

转载请注明,原创地址:点击打开链接   http://blog.youkuaiyun.com/u010587274/article/details/38928561 个人微信公众号:tanzi_888 (潭子技术圈)  C++中成员函数的重载、覆盖和隐藏的区别: 1 重载(overload): 是函数名相同,参数列表不同 重载只是在类的内部存在。但是不能靠返回值类型来判断。 1.

u010587274的专栏 3588

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++成员函数的重载,继承,覆盖和隐藏

一、 C++成员函数的重载 C++中的成员函数有四种,分别是普通成员函数,virtual虚函数,const成员函数。 (1) void func(int a); (2) virtual void func(int a); (3) void func(int a) const; 如果在一个类中,声明这四种函数,哪是重复定义?哪些是重载? 其中(1)(2)是重复定义,故编译不能通过,而(3

zgh1988的专栏 2217

[C++]成员函数重载、覆盖和隐藏

类之间的成员函数关系有重载、覆盖、隐藏;

weixin_43298884的博客 188

C++中成员函数的重载,覆盖和隐藏的区别

成员函数的重载,覆盖,和隐藏很容易混淆 成员函数的重载: 1.  必须在同一作用域内 2.  函数名字相同 3.  参数列表不同(包括参数个数, 参数类型或者顺序不同) 不受virtual的影响 成员函数的覆盖:  1.  为别位于基类和派生类中 2.  函数名相同 3.  参数列表完全相同 4.  基类函数必须有virtual修饰(virtual关键字告诉编译器,派生类中相同

魏尔肖的博客 597

C++成员函数重载、覆盖和隐藏的区别

问题定义:         写一个函数SortedMerge函数,该函数有两个参数,都是递增的链表,函数的功能就是合并这两个递增的链表为一个递增的链表,SortedMerge的返回值是新的链表。新链表由前两个链表按元素递增顺序合并而成,也就是说它不会创建新的元素。 比如:这里有两个链表,分别是 list1: 5->10->15 list2: 2->3->20 Sort

Wanda && Aidem 508

成员函数重载、覆盖和隐藏的区别

(1)成员函数被重载的特征:        a. 相同作用域        b. 函数名相同        c. 参数列表不同        d. virtual 关键字可有可无(2)覆盖是指派生类函数覆盖基类函数,特征是:        a. 不同作用域(分别位于派生类和基类中)        b. 函数名相同        c. 参数相同        d. 基类中必须要有virtual 关键...

YLH_yanlinghui的博客 470

C++中成员函数的重载、覆盖和隐藏

1、类成员函数的重载、重写、和覆盖区别     a.成员函数被重载的特征:      (1)相同的范围(在同一个类中);      (2)函数名字相同;      (3)参数不同;      (4)virtual关键字可有可无。     b.覆盖是指派生类函数覆盖基类函数,特征是:      (1)不同的范围(分别位于派生类与基类);      (2

732

[C++]成员函数的重载(overload)、覆盖(override)和隐藏(hide)

C++成员函数的重载、覆盖和隐藏 ref: https://blog.youkuaiyun.com/wanghuiqi2008/article/details/28419645 ref: https://blog.youkuaiyun.com/zgbsoap/article/details/566120 ref: 《高质量程序设计指南 C++/C语言 第3版》 1. 重载与覆盖 成员函数被重...

icevmj 828

成员函数的重载,覆盖(改写)和隐藏

成员函数的重载,覆盖(改写)和隐藏 成员函数被重载的特征是: 1、具有相同的作用域,即在同一个类申明中。 2、返回值相同,函数的参数不同。 3、同名const方法和非const方法之间的重载不受到2的约束,同类重载受到2的约束。 4、不需要virutal 关键字。 覆盖(也叫做多态)或者改写是指派生类重新实现或者改写了基类的成员函数,其特征是: 1、不同的作用域(分别位于派生类和基类

u013806473的专栏 597

浅谈 C++中成员函数的重载、覆盖和隐藏

C++是强大的,stl库简直就是人类智慧的结晶;C++是复杂的,在此之前我都不敢说熟悉C++,对于那些在程序中只用了cin、cout就说他的那是C++代码的程序员们,我感到很好笑。  现在谈谈C++中成员方法间的重载、覆盖以及隐藏。以下文章纯属自己的感觉,大神勿喷,高手绕道,若有错误,欢迎指出。  那天去和同学去面试,他问我C++技术面会面试什么,我说就那些,继承、重载、覆盖、隐藏。听

繁华落尽梦一场 655
上一篇: 多态的简单应用
下一篇: 虚基类与虚拟继承
lm_123_456
博客等级 码龄11年 35粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值