【C++】常对象

目录

  • 常对象
    • 常对象特点
    • 常数据成员
    • 常成员函数
    • 对象的常引用

常对象

把对象定义为常对象,对象中的数据成员就是常变量,在定义时必须带实参(或者有缺省构造函数)作为数据成员的初值。

const Person p1(3,4);//定义了一个常对象

常对象特点

1.常对象不能调用非常成员函数,而只能调用常成员函数。

  • 普通对象
#include <iostream>
using namespace std;

class Person
{
public:
	Person(int a, int b) : m_a(a), m_b(b) {};

	void print()
	{
		cout << "普通函数调用" << endl;
	}
	void print() const
	{
		cout << "常函数调用" << endl;
	}

private:
	int m_a;
	int m_b;
};


int main()
{
	Person p1(20, 30);
	p1.print();
	return 0;
}

请添加图片描述

  • 常对象
#include <iostream>
using namespace std;

class Person
{
public:
	Person(int a, int b) : m_a(a), m_b(b) {};

	void print()
	{
		cout << "普通函数调用" << endl;
	}
	void print() const
	{
		cout << "常函数调用" << endl;
	}

private:
	int m_a;
	int m_b;
};


int main()
{
	const Person p1(20, 30);
	p1.print();
	return 0;
}

请添加图片描述

2.普通对象可以调用常函数

常数据成员

形式:

const 类型 数据成员名 // 将类中的数据成员声明为只读

注意:
只能通过带参数初始化表的构造函数对常数据成员进行初始化

常成员函数

形式:

类型 函数名(形参表) const
{
}

利用关键字const声明函数为常成员函数。
在声明函数原型和定义函数时都要用到const。

注意:

常成员函数只能引用但不能修改对象的数据成员。
也不能调用非常数据成员。
一般成员函数可以访问或修改本类中的非const数据成员。
常对象只能调用常成员函数

对象的常引用

对象常引用无法更改对象的数据成员

#include <iostream>
using namespace std;

class Time
{
public:
	Time(int, int, int);
	int hour;
	int minute;
	int sec;
};

Time::Time(int h, int m, int s)

{
	hour = h;
	minute = m;
	sec = s;
}

void fun(const Time& t)
{
	t.hour = 18;//报错,因为常引用不允许修改
}

int main()
{
	Time t1(10, 13, 56);
	cout << t1.hour << endl;
	fun(t1);
	cout << t1.hour << endl;
	return 0;
}

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

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

相关文章

202452读书笔记|《永安梦》——错过前世 般配 换取今生 奉陪 任波谲云诡 共安危 共进退

今年追的第一本剧同名小说&#xff0c;《永安梦》改编自剧《长安第一美人》。本来是冲着徐正溪去看的&#xff0c;被娜娜、孙坚、夏楠路转粉了&#xff0c;只限这个剧。名字跟我有一个字一样诶。妆造&#xff0c;姿态&#xff0c;男女主&#xff0c;男二女二配角都不错。 因为看…

DRAGIN:利用LLM的即时信息需求进行动态RAG 论文解读

论文地址:https://arxiv.org/pdf/2403.10081.pdf DRAGIN 是一种新型的检索增强生成框架,专门为大型语言模型(LLMs)设计,以满足其在文本生成过程中的实时信息需求。该框架旨在解决传统检索增强生成(RAG)方法在动态性和准确性方面的局限性,特别是在处理复杂、多步骤或长文…

如何将Maven与TestNG集成

我们已经讨论了如何在maven中执行单元测试用例&#xff0c;但那些是JUnit测试用例&#xff0c;而不是TestNG。当maven使用“mvn test”命令进入测试阶段时&#xff0c;这些用例被执行。 本文将介绍如何将Maven与TestNG集成&#xff0c;并在maven进入测试阶段时执行TestNG测试。…

leetcode刷题日记-缺失的第一个正数(困难)

题目描述 解题思路 题目的意思十分容易理解&#xff0c;但是确实思考出来这种解题的方法还是比较难的。首先能想到的点就是[1,N]这个范围&#xff0c;因为只有N个数字&#xff0c;最小的数字只能在这个区间和N1两种可能。但是有时间复杂度的限制&#xff0c;我们该怎么找。我们…

【STM32F103】1-WireDS18B20(含ESP8266代码)

1-Wire 单总线 1-Wire是一种串行通信总线协议&#xff0c;由美国芯片制造商Dallas Semiconductor&#xff08;现为Maxim Integrated&#xff09;开发。这种协议主要用于连接和通信各种设备&#xff0c;并在多个领域得到了广泛应用&#xff0c;如温度传感器、电池管理、智能卡等…

测试用例设计方法-场景法详解

01 定义 场景法是通过运用场景来对系统的功能点或业务流程的描述&#xff0c;从而提高测试效果的一种方法。 场景法一般包含基本流和备用流&#xff0c;从一个流程开始&#xff0c;通过描述经过的路径来确定的过程&#xff0c;经过遍历所有的基本流和备用流来完成整个场景。 …

NO12 蓝桥杯单片机之DS1302的使用

1 DS1302是什么 DS1302由两块存储器组成&#xff0c;一个是日历时钟寄存器还有一个是31位的静态RAM存储器。 而在蓝桥杯中常考的就是日历时钟寄存器&#xff0c;故这里只介绍日历时钟寄存器。简单来说&#xff0c;其就是一个“电子表”&#xff0c;他会自动的实时记录时间&am…

简易挛生分拣系统设计

1 工效组合展示 2 方案规划设计 3 数字挛生建模 基础建模、动画设计、模型导出 4 软件体系架构 5 Web交互设计 5.1 页面架构 5.2 初始构造 5.3 模型运用 5.4 WS通信 5.5 运行展现 6 服务支撑编码 6.1 整体调度 6.2 WS服务 6.3 C/S通信 7 系统级调试完善

了解一下npm i的流程与原理

流程 执行npm install&#xff0c;先判断有无lock文件。 1、没有lock文件。会先根据依赖构建出扁平的依赖关系决定下哪些包。新版本的依赖关系是扁平化的&#xff0c;老版本是树结构&#xff0c;可能会出现依赖重复安装的问题&#xff0c;老版本示意图如下&#xff1a; 作为前…

【探索Linux】—— 强大的命令行工具 P.31(守护进程)

阅读导航 引言一、守护进程简介1. 概念2. 特点 二、用C创建守护进程⭕代码✅主要步骤 温馨提示 引言 当谈到计算机系统中运行的特殊进程时&#xff0c;守护进程&#xff08;daemon&#xff09;无疑是一个备受关注的话题。作为在后台默默运行并提供各种服务的进程&#xff0c;守…

【机器人】UIUC、北大、亚马逊提出基于动作的场景图,让机器人理解和操控未知环境

论文的主要内容是通过机器人操作的交互式探索&#xff0c;构建一个基于动作的场景图&#xff08;Action-Conditioned Scene Graph&#xff0c;简称ACSG&#xff09;来帮助机器人更好地理解和操作未知环境。 全文核心&#xff1a;在未知环境中如何让机器人自主探索并完成复杂任务…

乐维更改IP地址

1.1 系统IP调整 vim /etc/sysconfig/network-scripts/ifcfg-ens1921.2 Web相关服务IP变更 1.2.1 编辑/itops/nginx/html/lwjkapp/.env文件,更改ZABBIXSERVER、ZABBIXRPCURL、DB_HOST中的IP 1.2.2 进入/itops/nginx/html/lwjk_app/目录下,执行php bin/manager process-conso…

记录C++中,vector的迭代器在push_back以后扩容导致迭代器失效的问题

前言 vector是我们用到最多的数据结构&#xff0c;其底层数据结构是单端动态数组&#xff0c;由于数组的特点&#xff0c;vector也具有以下特性&#xff1a; ①O(1)时间的快速访问&#xff1b; ②顺序存储&#xff0c;所以插入到非尾结点位置所需时间复杂度为O(n)&#xff0c;删…

JDK21|史诗级的更新,虚拟线程

作者:鱼仔 博客首页: https://codeease.top 公众号:Java鱼仔 前言 要想看官方对于JDK21的更新说明&#xff0c;可以直接跳转到下面这个官方网站中 官网地址为&#xff1a;https://openjdk.org/projects/jdk/21/ JDK21是最新的LTS版本&#xff0c;里面添加了不少新的特性&…

中小型集群部署,Docker Swarm(集群)使用及部署应用介绍

1、Docker Swarm简介 说到集群&#xff0c;第一个想到的就是k8s&#xff0c;但docker官方也提供了集群和编排解决方案&#xff0c;它允许你将多个 Docker 主机连接在一起&#xff0c;形成一个“群集”&#xff08;Swarm&#xff09;&#xff0c;并可以在这个 Swarm 上运行和管…

【Web APIs】DOM节点

目录 1.节点操作 1.1DOM节点 1.2查找节点 1.2.1父节点查找 1.2.2子节点查找 1.2.3兄弟节点查找 1.3增加节点 1.4克隆节点 1.5删除节点 2.时间对象 2.1实例化 2.2时间对象方法 2.3时间戳 3.重绘和回流 1.节点操作 1.1DOM节点 DOM节点&#xff1a;DOM树中的每一个…

BaseDao封装增删改查

文章目录 什么是BaseDao操作代码增删改查询单个数据查询多个数据 总结 什么是BaseDao BaseDao是&#xff1a; 数据库里负责增加&#xff0c;删除&#xff0c;修改&#xff0c;查询 具体来说是一种接口代码,公共方法的接口类。 在dao层新建basedao,其他dao层接口继承basedao 相…

《VulnHub》Lampião:1

title: 《VulnHub》Lampio&#xff1a;1 date: 2024-03-28 21:37:49 updated: 2024-03-28 21:37:50 categories: WriteUp&#xff1a;Cyber-Range excerpt: 关键技术&#xff1a;主机发现&#xff0c;端口扫描、服务探测、操作系统探测&#xff0c;对开放的端口探测漏洞&#x…

正弦实时数据库(SinRTDB)的使用(5)-历史数据查询

前文已经将正弦实时数据库的使用进行了介绍&#xff0c;需要了解的可以先看下面的博客&#xff1a; 正弦实时数据库(SinRTDB)的安装 正弦实时数据库(SinRTDB)的使用(1)-使用数据发生器写入数据 正弦实时数据库(SinRTDB)的使用(2)-接入OPC DA的数据 正弦实时数据库(SinRTDB)…

民航电子数据库:查询cae服务存在哪些数据库以及删除数据库

目录 一、场景二、查询数据库列表三、删除数据库 一、场景 1、对接民航电子数据库 2、在CAEManage是没有直观展示已存在的数据库的&#xff0c;只能通过SQL查询 3、在CAEManage没有操作按钮可以删除数据库&#xff0c;只能通过SQL进行删除 二、查询数据库列表 1、登录SYSTE…