C++_const常成员作用

介绍

  • 常成员是什么
    1.常成员关键词为:const
    2.常成员有:常成员变量、常成员函数、常成员对象
  • 常成员有什么用
    1.常成员变量:用于在程序中定义不可修改内部成员变量的函数
    2.常成员函数:只能够访问成员变量,不可以修改成员变量
    (PS:凡是 mutable 修饰的成员变量,依然能够修改该成员变量)
    3.常成员对象:只能调用它的常成员函数,而不能调用该对象的普通成员函数(PS:只能调用常函数)
  • 常成员变量怎么用
    (1).常成员变量必须赋值,且初始化后不能更改
    (2).常成员变量赋值初始化:
     1.要么声明时赋值
     2.要么初始化表时进行赋值
  • 常成员函数怎么用
    (1).函数体前加上 const ,例子:const int foo(){}修饰 函数本身;
    (PS:只能够访问成员变量,不可以修改成员变量)
    (2).函数体后 大括号前加上 const,例子: int foo()const{}修饰 this指针;
    (PS:凡是 this 指向的成员变量都不可以修改,只能访问)
  • 常成员对象怎么用
    (1).常对象只能调用常函数
    (2).被 const 修饰的对象,对象指针 or 对象引用,统称为“常对象”

源码

#include<iostream>
#include<string>using namespace std;class Socre
{
public:Socre(int c) :Sum_socre(c), S_sumber(c)//通过初始化表赋值常变量{}//析构函数~Socre(){}//正常函数void foo(){cout << "正常函数" << endl;}//常函数void foo()const{cout << "常函数" << endl;}//常 this函数void Sfoo(int b)const{b = 30;//此时b依然能修改//this->Sum_socre = 80;//此时this->Sum_socre无法更改cout << "const Sum_socre = " << this->Sum_socre << endl;//++this->S_sumber 会修改值一直+1cout << "mutable  S_sumber = " << ++this->S_sumber << endl;cout << "b = " << b << endl;}
private:const int Sum_socre;//成绩mutable  int S_sumber;//凡是 mutable 修饰的成员变量,依然能够修改该成员变量
};int main()
{cout << "-------------正常对象版本-------------" << endl;Socre sumber(50);sumber.Sfoo(100);//传入一个b值sumber.Sfoo(80);//传入一个b值sumber.Sfoo(60);//传入一个b值sumber.foo();//优先调用正常函数cout <<"-------------常对象版本-------------"<< endl;const Socre sumber2(50);sumber2.Sfoo(90);//传入一个b值sumber2.Sfoo(100);//传入一个b值sumber2.Sfoo(700);//传入一个b值sumber2.foo();//优先调用常函数system("pause");return 0;
}

运行结果

-------------正常对象版本-------------
const Sum_socre = 50
mutable  S_sumber = 51
b = 30
const Sum_socre = 50
mutable  S_sumber = 52
b = 30
const Sum_socre = 50
mutable  S_sumber = 53
b = 30
正常函数
-------------常对象版本-------------
const Sum_socre = 50
mutable  S_sumber = 51
b = 30
const Sum_socre = 50
mutable  S_sumber = 52
b = 30
const Sum_socre = 50
mutable  S_sumber = 53
b = 30
常函数
请按任意键继续. . .

笔记扩充

new 存储示意图:

在这里插入图片描述

源码

#include<iostream>
#include<string>using namespace std;class A
{
public:A(){ cout << "A构造" << endl; }~A(){ cout << "A析构" << endl; }};int main()
{A *pa = new A[3];cout << *((int*)pa-1) << endl;//获取new空间大小delete[] pa;//此时会产生析构三次system("pause");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/298164.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python - 深夜数据结构与算法之 Heap Binary Heap

目录 一.引言 二.堆与二叉堆介绍 1.Heap 堆 2.Binary Heap 二叉堆 3.HeapifyUp 添加节点 4.HeapifyDown 删除节点 5.Heap 时间复杂度 6.Insert & Delete 代码实现 三.经典算法实战 1.Smallest-K [M14] 2.Sliding-Window-Max [239] 3.Ugly-Number [264] 4.Top-…

工具系列:TensorFlow决策森林_(2)排序学习Learning to Rank

文章目录 安装 TensorFlow Decision Forests导入库什么是排序模型&#xff1f;让我们训练一个排序模型使用排序模型进行预测 欢迎来到 TensorFlow决策森林&#xff08; TF-DF&#xff09;的 学习排序Learning to Rank。 在本文中&#xff0c;您将学习如何使用 TF-DF进行排序…

股市中的Santa Claus Rally (圣诞节行情)

圣诞节行情 Santa Claus Rally Santa Claus Rally 是指 12 月 25 日圣诞节前后股市的持续上涨这样一个现象。《股票交易员年鉴》的创始人 Yale Hirsch 于 1972 年创造了这个定义&#xff0c;他将当年最后五个交易日和次年前两个交易日的时间范围定义为反弹日期。 根据 CFRA Re…

Redis基础-Redis概念及常见命令

1.nosql数据库 NoSQL数据库是一种提供了非关系型数据存储的数据库系统&#xff0c;与传统的关系型数据库&#xff08;如SQL数据库&#xff09;不同。NoSQL数据库的特点是灵活性高&#xff0c;能够处理结构化、半结构化或非结构化数据。它们通常用于大数据和实时Web应用。NoSQL数…

Web Components入门不完全指北

目前流行的各类前端框架&#xff0c;不管是react, angular还是vue&#xff0c;都有一个共同点&#xff0c;那就是支持组件化开发&#xff0c;但事实上随着浏览器的发展&#xff0c;现在浏览器也原生支持组件式开发&#xff0c;本文将通过介绍Web Components 的三个主要概念&…

JavaScript常用技巧专题五

文章目录 一、使用适当的命名和注释来提高代码可读性二、优雅的写条件判断代码2.1、普通的if else2.2、三元运算符2.3、多个if else2.4、switch case2.5、对象写法2.6、Map写法 三、封装条件语句四、函数应该只做一件事五、Object.assign给默认对象赋默认值六、函数参数两个以下…

SQL进阶理论篇(二十一):基于SQLMap的自动化SQL注入

文章目录 简介获取当前数据库和用户信息获取MySQL中的所有数据库名称查询wucai数据库中的所有数据表查看heros数据表中的所有字段查询heros表中的英雄信息总结参考文献 简介 从上一小节&#xff0c;可以发现&#xff0c;如果我们编写的代码存在着SQL注入的漏洞&#xff0c;后果…

网络7层架构

网络 7 层架构 什么是OSI七层模型&#xff1f; OSI模型用于定义并理解数据从一台计算机转移到另一台计算机&#xff0c;在最基本的形式中&#xff0c;两台计算机通过网线和连接器相互连接&#xff0c;在网卡的帮助下共享数据&#xff0c;形成一个网络&#xff0c;但是一台计算…

Vue 3 Composition API:让组件开发更高效、灵活(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【JavaEE初阶一】线程的概念与简单创建

1. 认识线程&#xff08;Thread&#xff09; 1.1 关于线程 1.1.1 线程是什么 由前一节的内容可知&#xff0c;进程在进行频繁的创建和销毁的时候&#xff0c;开销比较大&#xff08;主要体现在资源的申请和释放上&#xff09;&#xff0c;线程就是为了解决上述产生的问题而提…

聪明高效能力广,AGI如何赋能内容管理?

文 | 智能相对论 作者 | 叶远风 毫无疑问&#xff0c;现在的大模型在技术比拼之外&#xff0c;如何通过产品化的方式走入到实际业务&#xff0c;是各厂商的着力点。 而一些一贯与数字化场景紧密融合的服务厂商&#xff0c;在大模型浪潮一开始就已经走在落地一线。 大数据基…

【Linux系统基础】(3)在Linux上部署运维监控Zabbix和Grafana

目录 运维监控Zabbix部署简介安装安装前准备 - Mysql安装Zabbix Server 和 Zabbix Agenta. 安装Zabbix yum库b. 安装Zabbix Server、前端、Agentc. 初始化Mysql数据库d. 为Zabbix Server配置数据库e. 配置Zabbix的PHP前端 配置zabbix 前端&#xff08;WEB UI&#xff09; 运维监…