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++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • CONST
    +关注

    关注

    0

    文章

    43

    浏览量

    7999
  • 重载
    +关注

    关注

    0

    文章

    7

    浏览量

    2741
收藏 人收藏

    评论

    相关推荐

    STM32的VDD与VDDA不一样可以吗?

    STM32 的VDD与VDDA不一样可以么
    发表于 04-11 06:34

    这图是怎么回事,和案例的颜色不一样

    大哥们,这图是怎么回事,和案例的颜色不一样,拜求各位了
    发表于 07-18 10:15

    2003和245有什么不一样的地方

    2003和245有什么不一样的地方啊啊 啊???
    发表于 10-11 23:11

    为什么测量值和实际不一样

    交流电流实际值和测量值不一样?如图:
    发表于 12-10 23:10

    自己画出来的形状和导入pcb不一样

    `求大神解自己画出来的形状和导入pcb不一样`
    发表于 12-26 10:37

    线损校准,为啥不一样

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

    PCB 的敷铜 颜色怎么不一样??

    `救命啊 为什么 同层面PCB 的敷铜 颜色和 走线的颜色不一样`
    发表于 02-17 17:09

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

    要怎么解决接口和产生的数据类型不一样的问题,然后利用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

    为什么LCD ID的命令还会不一样

    我的stm32读到的LCD ID是8989,可<不完全手册>上介绍的是9230。光盘的资料没有关于8989的,有些命令不一样。请教原子哥。是手册问题么?可否发个8989的资料上来?
    发表于 09-29 05:48

    为什么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

    不一样的闪灯电

    没有L没有C,除了闩锁,甚么都不能做吧?! 不一定,PTC与NTC也可充当主震,不过无法震出正弦波来。 闪闪灯及流水灯,早就不是新鲜事物,但是,以灯带着电路走,那就不一样了。
    发表于 09-28 17:25