当前位置: 首页 > news >正文

代码技巧: 类中同一个函数可以同时存在常函数版本和普通函数版本(c++)

在类中如果我们希望在常函数中修改某属性的值可以使用mutable来实现。

如果有下面的场景,假设我们有一个函数hobby()需要在非const的对象调用的时候,应该去修改内部的属性,在const修饰的对象调用的时候可以满足不修改内部的属性。

鉴于上面的情况,我们即使使用mutable也无法满足,因为mutable是让const函数修改属性,一旦设置const的对象和非const的对象就都可以修改了,并不能像上面那样进行区分。

解决方式:   我们可以对于一个函数写两个版本一个是被const修饰的,一个是不被const修饰的。这两个函数的函数名一样,参数一样,内部实现可以相同也可以不同。

 当const的对象去调用此函数的时候,会调用到const修饰的版本,这样就不会修改属性。
 当非const的对象去调用函数的时候,会调用到非const修饰的版本,这样就可以修改属性。

 

当然,我们同一个函数实现两个版本,可能会重复写两段相同的代码,只是const和非const的区别,所以如果不是特殊需求,还是写一个就行。(根据情况确定是否设定为const) 


例子:

#include <iostream>
#include <string>class People {
private:std::string m_hobby;
public:People(const std::string& other): m_hobby(other) {}std::string hobby() {m_hobby = "看电视";return m_hobby;}std::string hobby() const{return m_hobby;}
};int main() {People p("学习");p.hobby();const People p1("学习");p1.hobby();std::cin.get();return 0;
}

p1为常对象,调用的是hobby的常函数版本,
p为普通对象,调用的是hobby的普通函数版本。 

http://www.lryc.cn/news/349129.html

相关文章:

  • 2024OD机试卷-转盘寿司 (java\python\c++)
  • MongoDB创建或删除用户并验证数据库权限
  • 半小时搞懂STM32面经知识——RCC
  • 汇聚荣科技:拼多多开店没有流量应该怎么办?
  • uni-app(三):离线打包与插件引用(Android)
  • 数据分析——对比思维、A/B test
  • 深度探索Java工厂模式:创新与灵活性的结合
  • delphi6直连redis服务(用lua脚本redis模块)
  • 嵌入式Linux:编译和使用Protobuf库
  • 导航app为什么知道还有几秒变绿灯?
  • 设计模式 六大原则之单一职责原则
  • DOM重点核心(注册事件+DOM事件流)
  • 浅谈操作系统中的重要概念——线程(3)——设计模式
  • nginx配置域名与IP访问服务冲突问题
  • 2024OD机试卷-字符串序列判定 (java\python\c++)
  • 7-128 最长公共子串
  • 【瑞萨RA6M3】2. UART 实验
  • js遇到需要正则匹配来修改img标签+清除行内样式
  • Vue学习v-if与v-else-if
  • linux进阶高级配置,你需要知道的有哪些2-firewalld防火墙(一)
  • Centos 中如何汉化man命令
  • 原生小程序开发如何使用 tailwindcss
  • spring alibaba中的seata分布式事务
  • MQTT学习(二)
  • 入职Java,不会git被开除了。。。
  • Mysql 隔离级别
  • 每日一学—K邻算法:在风险传导中的创新应用与实践价值
  • 基于Springboot的校园疫情防控信息管理系统(有报告)。Javaee项目,springboot项目。
  • 【C++】内联函数、auto、范围for
  • Day 46 139.单词拆分