1:const static 重载 覆盖隐藏 等部分知识点总结。

测试环境 VS2012

主要描述下自己工作中容易混淆的点。


const

 1 不能只基于返回值是否为const来进行重载,换句话说,重载和返回值无关,即是否重载时不看函数返回值(包括返回值的const和static限定)

  因为当调用foo(1)的时候,编译器不知道是不是要把返回值置为const。

 2 不能只基于形参列表中的形参是否限定为const进行重载。因为对于foo(1),系统不知道调用形参是否限定了const的函数。

3 可以只基于成员函数是否为const进行重载。

  当非const对象调用时,优先调用非const的函数,若只有对应的const函数,则也调用。

 而Const对象调用时,只能调用const的函数。

4 const成员只能在初始化列表中初始化。



static

1 不能只基于某函数是不是加static限定来进行重载

2 static成员函数只能直接访问static数据,当然可以通过携带this形参的方式访问其他的。

3 static不单独从属某一个对象,但是又属于任意一个对象(任意对象都可以调用,也可以直接类名::函数调用)

4 static外部使用表明变量本文件起作用(一般定义在源文件)。


重载:

1 同一个类的同名函数

2 形参类型列表不同或者有const函数区分。

3:返回类型是否相同不是必须条件。


覆盖:发生于基类指针(可以)调用子类函数时

1:父子类函数形参类型列表和const限定完全一致(此处的const限定指的是函数是否为const,而形参是否为const则忽略)

2:父类有virtual

3:调用时调用子类的实现

4:函数返回值必须相同,不过形参是否带const则无所谓。

PS:若仅仅子类对应函数返回值不同则编译不通过。而如果是子类和父类const限定不同则可以编译通过但是不是“覆盖”的场景了,此时是“隐藏”的场景


隐藏基类指针不能调用子类函数

场景1: 父子类形参列表和const限定相同,没有virtual--

场景2: 父子类形参列表和const限定不同,不管有没有virtual

3:返回类型是否相同不是必须条件。

此时,基类指针不能调用子类函数(因为不是覆盖),子类指针或对象也不能调用父类函数(因为父类的被隐藏)



因此如果把同名函数的形参类型列表和const函数限定定义为A的话:

1:同一个类里面A不同的函数之间是重载

2:父子类里面A相同+父类有virtual是覆盖

3:父子类里面A相同+父类无VIRTUAL 或者 父子类的A不同是隐藏。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值