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 会修改值一直+1
		cout << "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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法应用:基于斑马算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于斑马算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于斑马算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.斑马算法4.实验参数设定5.算法结果6.参考文献7.MA…

C#教程(五):枚举

1、什么是枚举 枚举&#xff08;Enum&#xff09;是一种用于定义命名常量集合的数据类型。它允许开发人员创建一个命名的整数常量集合&#xff0c;这些常量可以在代码中代表特定的值。 2、示例 以下是一个简单的枚举示例&#xff1a; // 定义一个枚举类型 enum DaysOfWeek …

C++ Qt开发:Charts绘制各类图表详解

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍TreeWidget与QCharts的常用方法及灵活运用。 …

深入探讨多模态模型和计算机视觉

近年来&#xff0c;机器学习领域在从图像识别到自然语言处理的不同问题类型上取得了显着进展。然而&#xff0c;这些模型中的大多数都对来自单一模态的数据进行操作&#xff0c;例如图像、文本或语音。相比之下&#xff0c;现实世界的数据通常来自多种模态&#xff0c;例如图像…

基于[Discretized] Torus的全同态加密指引(2)

前序博客有&#xff1a; 基于[Discretized] Torus的全同态加密指引&#xff08;1&#xff09; 5. 基于已加密数据处理 很显然&#xff0c;TLWE加密方案和TGLWE加密方案均具有加法同态性。[GSW13] Gentry–Sahai–Waters 方法使用matrix product来将TLWE加密方案和TGLWE加密方…

算法导论复习(四)主方法的专题

主方法我们要记住的是什么呢&#xff1f;

matlab附加功能管理器安装蓝牙工具箱

由于最近需要做蓝牙仿真方面的东西&#xff0c;需要用到matlab的蓝牙工具箱&#xff0c;根据官网例子输入&#xff1a; commSupportPackageCheck(BLUETOOTH);检测是否包含该工具箱&#xff0c;结果出现&#xff1a; 点击Add-On-Explorer出现&#xff1a; 网上搜索发现这是因为…

验证码服务使用指南

验证码服务使用指南 1 部署验证码服务 1.1 基础环境 Java 1.8 Maven3.3.9 1.2 安装Redis 参考“Redis安装指南” 1.3 部署验证码服务 1.3.1 下载源码 使用git从远程下载验证码服务代码(开源)。 1.3.2 使用idea打开项目 使用idea打开上一步下载的sailing目录&#xf…

关于Dark Frost 僵尸网络对游戏行业进行DDoS攻击的动态情报

一、基本内容 近期&#xff0c;一种名为Dark Frost 的新型僵尸网络被发现正在对游戏行业发起分布式拒绝服务攻击&#xff08;DDoS)。目标包括游戏公司、游戏服务器托管提供商、在线流媒体甚至和网络信息安全攻击者直接交互的其他游戏社区成员。截至2023年2月&#xff0c;僵尸网…

本地搭建【文档助手】大模型版(LangChain+llama+Streamlit)

概述 本文的文档助手就是&#xff1a;我们上传一个文档&#xff0c;然后在对话框中输入问题&#xff0c;大模型会把问题的答案返回。 安装步骤 先下载代码到本地 LangChain调用llama模型的示例代码&#xff1a;https://github.com/afaqueumer/DocQA&#xff08;代码不是本人…

session 的原理

目录 1&#xff0c;session 的原理如何删除 session1&#xff0c;设置过期时间2&#xff0c;客户端主动通知 2&#xff0c;和 cookie 的区别安全性举例&#xff1a;验证码 3&#xff0c;举例 1&#xff0c;session 的原理 建议先看这篇文章&#xff1a;浏览器 cookie 的原理&a…

C语言操作符if语句好习惯 详解分析操作符(详解4)

各位少年&#xff1a; 前言 还记得我们上一章讲过一个比较抽象的代码&#xff0c;它要比较两次都是真的情况下才能打印&#xff0c;那么很显然这样写代码是有弊端的&#xff1f;哪我们C语言之父丹尼斯.里奇&#xff0c;先介绍一下上次拉掉了if语句的好习惯 好再分享一些操作符…

ref组合式api声明状态

一、ref声明响应式状态&#xff08;支持所有类型&#xff09;&#xff0c;因为内部维护一个refImpl对象{value:***}&#xff0c;,如下图&#xff1a; ref声明的数字、字符、布尔、对象、数组类型的值都存在refImpl 对象的value属性里面 所以&#xff0c;如果要改变ref 声明的变…

国外加固Appdome环境检测与绕过

文章目录 前言第一部分&#xff1a;定位检测逻辑的通用思路1. 通过linux“一切皆文件”思路定位2. 分析现有检测软件猜测可能检测点3. 通过正向开发思路定位4. 通过activity及弹窗定位 第二部分&#xff1a;检测结果展示整体流程1. Jni反射调用doDispath完成广播发送2. NativeB…

实战教学:零食百货商城小程序开发全程指导

随着移动设备的普及和互联网技术的发展&#xff0c;小程序成为越来越多人的选择&#xff0c;特别是在购物方面。开发一个零食百货商城小程序&#xff0c;可以让你在手机上随时随地购买各种零食&#xff0c;方便快捷。本文将为你提供全程指导&#xff0c;让你轻松开发一个成功的…

低代码实施复杂应用的实践方法

内容来自演讲&#xff1a;韦有炬 | 柳州知行远企业管理咨询有限公司 | 总经理 摘要 本文探讨了在全民开发时代如何使用低代码实施复杂应用并降低上线风险。文章分析了复杂系统实施失败的风险&#xff0c;包括项目规划不周、人员变动、企业基础管理不足等&#xff0c;并对比了低…

漏刻有时数据可视化Echarts组件开发(46)散点图颜色判断

series组件 series: [{name: Top 5,type: scatter,coordinateSystem: bmap,data: convertData(data.sort(function (a, b) {return b.value - a.value;}).slice(0, 6)),symbolSize: 20,encode: {value: 2},showEffectOn: render,rippleEffect: {brushType: stroke},label: {fo…

数据仓库【2】:架构

数据仓库【2】&#xff1a;架构 1、架构图2、ETL流程2.1、ETL -- Extract-Transform-Load2.1.1、数据抽取&#xff08;Extraction&#xff09;2.1.2、数据转换&#xff08;Transformation&#xff09;2.1.3、数据加载&#xff08; Loading &#xff09; 2.2、ETL工具2.2.1、结构…

麦肯锡产品经理问题解决流程终极指南

您是否想知道世界上最成功的产品经理如何始终如一地提供不仅满足而且超出预期的解决方案&#xff1f;秘密可能就在于世界上最负盛名的咨询公司之一麦肯锡公司所磨练的方法论。本文深入探讨了麦肯锡的问题解决流程&#xff0c;该流程专为希望提升水平的产品经理量身定制。 01. 麦…

基于Java开发的微信约拍小程序

一、系统架构 前端&#xff1a;vue | element-ui 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk8 | mysql8 | maven | mysql 二、代码及数据库 三、功能说明 01. 首页 02. 授权登录 03. 我的 04. 我的-编辑个人资料 05. 我的-我的联系方式 06. …