0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++中不一样的重载是什么

汽车电子技术 来源:程序喵大人 作者:程序喵 2023-02-21 14:02 次阅读

关于什么是重载想必大家都知道,无非就是参数个数不同,参数类型不同可以重载,这里我就不过多介绍啦。

这里想分享C++中一个不一样的重载,即const重载。

可以看下面的代码:

struct A {
    int count() {
        std::cout << "non const" << std::endl;
        return 1;
    }


    int count() const {
        std::cout << "const" << std::endl;
        return 1;
    }
};


int main() {
    A a;
    a.count();
    const A b;
    b.count();
}

这段代码会输出什么?

输出的是这样:

non const
const

不知道大家平时有没有关注过这种用法,没关注过可以继续向下看哈。

图片

从上面的输出结果我们也可以看到,const修饰的对象调用的是使用const修饰的方法,非const对象调用的是非const的方法。

然而想必大家都知道对象调用的原理:

看下面的这段代码:

A a;
a.func();

其实到底层,函数可能会变成这样:

func(A* a);

函数是在代码段,对象是在数据段,调用不同对象的函数,其实只不过是同一个函数,传递了不同的数据参数而已。

上面的是把对象的this指针传进去。

再回到上面的代码:

struct A {
    int count() {
        std::cout << "non const" << std::endl;
        return 1;
    }


    int count() const {
        std::cout << "const" << std::endl;
        return 1;
    }
};

可以理解为:

int count(A *);
int count(const A*);

咦,这不就是重载吗,难道还有const重载?

还真有,看下这段代码:

struct A {
    int count(const int& s) {
        std::cout << "const" << std::endl;
        return 1;
    }


    int count(int& s) {
        std::cout << "non const" << std::endl;
        return 1;
    }
};


int main() {
    A a;
    a.count(4);
    int c = 5;
    a.count(c);
}

输出如下:

const
non const

所以得出结论:

不只是参数类型和个数不同会产生重载,const修饰的参数也会有重载。

但是只有当const修饰的是指针或者引用类型时才可以,普通的int和const int会编译失败的,具体大家可以自己写代码试试。

这里大家也可以想想,问什么一定要指针或者引用类型时重载才可以呢?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++
    C++
    +关注

    关注

    22

    文章

    2114

    浏览量

    73819
  • CONST
    +关注

    关注

    0

    文章

    45

    浏览量

    8180
  • 重载
    +关注

    关注

    0

    文章

    8

    浏览量

    2774
收藏 人收藏

    评论

    相关推荐

    C++的结构和类

    C++ 有结构,就像 C 一样,因为它们是不一样的。C++ 有类,它们与结构非常相似。本文解开这些语言元素的细节。
    发表于 07-18 17:37 835次阅读

    线损校准,为啥不一样

    线损校准,为啥不一样,今天测试时发现,校准是,信号源频率不一样,线损差别很大,有1dB 多!!!
    发表于 06-05 13:58

    数据类型不一样和接口 怎么解决

    要怎么解决接口和产生的数据类型不一样的问题,然后利用MYRIO的模拟输出通道接到示波器里面为什么没有波形啊,数据类型应该是不一样,要怎么解决这个问题呢?
    发表于 05-09 01:00

    一样c文件但keil的输出文件不一样

    一模一样的啊,还有都能编译通过和下载,不知道这是什么原因,还有就是我对比发现这两个工程的输出文件的有差别,是不是keil没有设置好导致输出文件不一样,进而导致程序运行结果不一样啊,求高手指点
    发表于 03-07 08:26

    程序编辑器结果不一样

    有个程序段int i=1;int j=0;j=((i++)*(i++));printf(“%d,%d\n”,i,j);在不同的编辑器结果为什么不一样 我用虚拟机的VI编辑结果i=3;j=1;用C++编辑结果i=3;j=2;到底结果哪个才正确?迷茫了就指教!谢谢
    发表于 03-13 02:22

    为什么我的泪滴不一样

    我的泪滴怎么和网上的不一样??
    发表于 03-13 15:23

    为什么c语言中a和b的值不一样c和d的值不一样

    ];a = sizeof(table1);b = sizeof((u8)table1);c = sizeof(table2);d = sizeof((u32)table2);为什么a和b的值不一样啊???为什么c和d的值
    发表于 09-29 08:50

    请问C++ primer和C++primer plus这两本书有什么不一样

    如题这两本书有什么不一样吗?望读过的大神们说说啊?给小弟提个意见,该选哪本好啊?ps:看了《指针和C》,但是C++基础点都没有。
    发表于 10-31 23:13

    c++c语言之间有什么区别

    C++是在C语言的基础上发展来的,但是并不是C++C语言高级,两者的编程思想不一样,应用的领域也不一样
    发表于 12-11 10:17 3.1w次阅读

    气密性测试与气压测试有什么不一样的呢?

    气密性测试与气压测试有什么不一样的呢?
    发表于 12-27 15:38 4606次阅读

    C++函数重载的使用

    重载,顾名思义从字面上理解就是重复装载,打个不恰当的比方,你可以用个篮子装蔬菜,也可以装水果或者其它,使用的是同个篮子,但是可以用篮子重复装载的东西
    的头像 发表于 04-15 11:22 665次阅读

    电容容量一样大小不一样能用吗

    有时候家里面电器的电容损坏,很多人很难找到一模一样的来更换,能找到容量致的电容器就不容易了,电容容量一样大小不一样能用吗?
    的头像 发表于 09-21 09:54 2652次阅读

    电容容量一样大小不一样能用吗?

    来储存电荷,从而形成电荷存储器、信号滤波器、振荡器等等。 但是,在实际应用,我们常常会遇到电容容量大小相同但尺寸大小却不一样的情况。那么,电容容量大小相同但尺寸大小不同的电容器可以互相替代吗?这个问题似乎比较简单,但
    的头像 发表于 09-22 16:30 7243次阅读

    不同芯片的DMA(Direct Memory Access)是不一样

    不同芯片的DMA(Direct Memory Access)是不一样
    的头像 发表于 10-16 09:14 1618次阅读

    拼接屏白底颜色不一样怎么解决?

    在拼接屏使用过程,有时会遇到白底颜色不一样的问题,这可能会影响到整个显示画面的质量和效果。
    的头像 发表于 11-24 10:22 900次阅读