C嘎嘎~~[类 下篇 之 日期类的实现]

简介: C嘎嘎~~[类 下篇 之 日期类的实现]

6.const成员

6.1 const成员的引入

class Date
{
public:
    // 构造函数
  Date(int year = 2023, int month = 5, int day = 5)
  {
    _year = year;
    _month = month;
    _day = day;
  }
  void Print()
  {
    cout << _year << " " << _month << " " << _day << endl;
  }
private:
  int _year;
  int _month;
  int _day;
};
int main()
{
  Date d1(2023, 5, 8);
  d1.Print(); // 可以运行
  const Date d2(2023, 5, 9);
  d2.Print(); // error C2662: “void Date::Print(void)”: 
             // 不能将“this”指针从“const Date”转换为“Date &”
}

为什么会出现这种情况? 报错中的 “不能将 this指针从 const Date 转换为 Date&” 是什么意思??

6db54990019240349f583cd26257aff5.png

那么该如何解决这种权限的放大问题呢??

8bf584c321634ba5ba6db3df84900e01.png

我们知道 this指针是不在 行参和实参中显示的, 车门是焊死的; 那我们如何把const 加到 this指针上呢?

这时候我们的祖师爷就引入了 const成员


6.2const成员的概念

将const 修饰的成员函数称为 const成员函数, 实际上const 修饰的是隐含的 this指针⇒ 表明在该成员函数中不能对类的任何成员进行修改


class Date
{
public:
    // 构造函数
  Date(int year = 2023, int month = 5, int day = 5)
  {
    _year = year;
    _month = month;
    _day = day;
  }
  void Print() const
  {
    cout << _year << " " << _month << " " << _day << endl;
  }
private:
  int _year;
  int _month;
  int _day;
};
int main()
{
  Date d1(2023, 5, 8);
  d1.Print(); 
  const Date d2(2023, 5, 9);
  d2.Print(); 
}
*****
2023 5 8
2023 5 9
*****

通过前面的例子, 我们不难发现: const函数是挺好用的⇐ 普通对象 和 const对象 都能调用 const成员函数.

那么我们嫩不嫩将每一个成员函数都变成 const成员函数?? ⇐ 答案是显而易见的: 当然是不能的, 因为有些成员函数是要去修改成员变量的, 变成 const成员函数就不能对成员变量进行修改了

只要成员函数内部不修改成员变量, 那么就用 const成员函数


补充:


指针 和 引用有权限一说, 而其他的没权限一说~

7.日期类的实现


相关文章
|
存储 小程序 前端开发
深入理解微信授权登录流程、用户信息获取和Emoji的存储
深入理解微信授权登录流程、用户信息获取和Emoji的存储
651 0
|
存储 数据采集 缓存
海量数据去重的Hash、bitmap、BloomFilter、分布式一致性hash
海量数据去重的Hash、bitmap、BloomFilter、分布式一致性hash
438 1
node-sass 安装失败 rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libs
检查一下有没有配置python2.7环境变量 npm install -g node-gyp npm install --global --production windows-build-tools(通过管理员打开) npm i -g node-sass
667 1
|
机器学习/深度学习 自然语言处理 算法
7.1.3、使用飞桨实现基于LSTM的情感分析模型
该文章介绍了如何使用飞桨(PaddlePaddle)实现基于长短时记忆网络(LSTM)的情感分析模型,包括数据处理、网络定义、模型训练、评估和预测的详细步骤。
|
10月前
|
数据采集 机器学习/深度学习 人工智能
《AI 剧本生成与动画创作解决方案评测报告》
《AI 剧本生成与动画创作解决方案评测报告》
348 8
《AI 剧本生成与动画创作解决方案评测报告》
|
11月前
|
存储 安全 生物认证
《严守权限之门:ArkTS中模型访问权限的管理之道》
在鸿蒙Next的ArkTS开发中,管理模型访问权限至关重要。通过系统权限管理机制,在config.json中声明权限并使用AbilityAccessCtrl模块进行检查和申请;基于用户身份认证,确保只有授权用户能访问模型;实现细粒度权限控制,按角色分配不同权限级别;实时监测权限变化,动态调整访问权限。这些措施共同保障数据安全、隐私及应用稳定性。
409 29
|
10月前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
323 10
|
11月前
|
数据采集 XML API
深入解析BeautifulSoup:从sohu.com视频页面提取关键信息的实战技巧
深入解析BeautifulSoup:从sohu.com视频页面提取关键信息的实战技巧
|
机器学习/深度学习 自然语言处理 算法
探索深度学习中的序列建模新范式:Mamba模型的突破与挑战
【4月更文挑战第13天】Mamba模型,一种新型序列建模架构,通过选择性状态空间提高处理长序列数据的效率,实现线性时间复杂度。在语言、音频和DNA序列建模中展现优秀性能,尤其在大规模预训练中超越Transformer。然而,面对连续信号数据时可能不及LTI模型,且模型参数优化及硬件实现具有挑战性。
756 6
探索深度学习中的序列建模新范式:Mamba模型的突破与挑战
|
SQL 安全 网络协议
网络安全行业名词_失陷主机,网络安全面试自我介绍
网络安全行业名词_失陷主机,网络安全面试自我介绍