嵌入式学习记录6.6(拷贝构造/友元函数/常成员函数)
一.拷贝构造函数和拷贝赋值函数
1.1拷贝构造函数功能,格式
拷贝构造函数是一种特殊的构造函数,用来将一个类对象给另一个类对象初始化使用的。
1> 用一个类对象给另一个类对象初始化时,会自动调用拷贝构造函数。
2> 当一个类对作为函数的实参,传递给形参的过程时,会自动调用拷贝构造函数。
3> 当一个函数返回一个类对象时,会自动调用拷贝构造函数。
类名(const 类名 &other) {函数体内容; }
1.2浅拷贝和深拷贝(重点)
1> 系统会提供一个默认的拷贝构造函数,如果程序员手动定义,则系统取消默认提供。
2> 系统提供的拷贝构造函数,是将一个类对象给另一个类对象初始化使用的,换句话说,就是将一个类对象的所有数据成员赋值给另一个类对象的所有数据成员。
3> 浅拷贝:系统提供的拷贝构造函数。
4> 如果类中没有指针成员,则调用系统提供的拷贝构造函数,没有问题。如果类中有指针成员,依然调用系统提供的拷贝构造函数,则会造成double free现象。
1.3拷贝构造赋值功能,格式
用一个类对象给另一个类对象进行赋值操作,会自动调用拷贝赋值函数
类名 &operator=(const 类名 &other) {函数体内容; }用一个类对象给另一个类对象进行赋值操作,会自动调用拷贝赋值函数。
二.友元函数
2.1 作用和种类
作用:可以让一些函数或者类去访问另一类的私有数据成员。
种类:
1> 全局函数做友元
2> 类做友元
3> 成员函数做友元
2.2全局函数做友元
让一个全局函数访问一个类的私有数据成员。
#include <iostream>using namespace std;//封装一个房间类 class Room {friend void goodGay(Room &r); //声明该函数是本类的好朋友,可以访问本类的私有数据成员 private:string bed_room; //卧室 public:string sitting_room; //客厅public://无参构造函数Room(){bed_room = "卧室";sitting_room = "客厅";}};//全局函数 void goodGay(Room &r) {cout << "好基友正在访问。。" << r.sitting_room << endl;cout << "好基友正在访问。。" << r.bed_room << endl; }int main() {Room r;goodGay(r);return 0; }
2.3类做友元
让一个类去访问另一个类的私有数据成员。
#include <iostream>using namespace std;//声明有这样的类
class Room;//封装好盆友的类
class GoodGay
{
private:Room *r;
public:GoodGay();void visit();
};class Room
{friend class GoodGay; //声明该类是本类的好朋友,可以访问本类的私有数据成员
private:string bed_room;
public:string sitting_room;Room(){bed_room = "卧室";sitting_room = "客厅";}
};GoodGay::GoodGay()
{r = new Room;
}
void GoodGay::visit()
{cout << "好基友的类 正在访问。。" << r->sitting_room << endl;cout << "好基友的类 正在访问。。" << r->bed_room << endl;
}int main()
{GoodGay g;g.visit();return 0;
}
2.4成员函数做友元(了解)
让一个类中的成员函数去访问另一个类的私有数据成员。
小结
1> 不要过度的使用友元,会降低或者破坏封装性。
2> 友元不具有交换性、传递性、继承性
三.常成员函数和常对象
类中的成员函数都能对数据成员做修改操作,如果设计一个函数不能对数据成员做修改,则需要用常成员函数来完成。
3.1常成员函数
常成员函数不能修改数据成员。
返回值类 函数名(形参列表)const {函数体内容; }
3.2常对象
常对象的数据成员不能被改变。
格式: const 类名 对象名;
1】非常对象,既可以调用非常成员函数 ,也可以调用常成员函数,优先调用非常成员函数。
2】常对象只能调用常成员函数,不能调用非常成员函数。
#include <iostream>using namespace std;class Stu { private:string name;int age; public:Stu(){}Stu(string name, int age):name(name),age(age){}void show() const //常成员函数 this指针原型:Stu const * const this;{//this->age = 48;//this = nullptr;//name = "lisi";//不能对数据成员修改cout << name << " " << age << endl;}void show() //非 常成员函数 this原型: Stu *const this;{//this->age = 48;//this = nullptr;cout << name << " " << age << endl;}};int main() {//Stu s1("zhangsan", 18); //非常对象const Stu s1("zhangsan", 18); //常对象s1.show();return 0; }
3.3mutable关键字
mutable修饰的数据成员,表示该数据成员可以在常成员函数中被修改。
四.思维导图

相关文章:
嵌入式学习记录6.6(拷贝构造/友元函数/常成员函数)
一.拷贝构造函数和拷贝赋值函数 1.1拷贝构造函数功能,格式 拷贝构造函数是一种特殊的构造函数,用来将一个类对象给另一个类对象初始化使用的。 1> 用一个类对象给另一个类对象初始化时,会自动调用拷贝构造函数。 2> 当一个类对作为函数的实参&…...
宝塔 nginx 配置负载均衡 upstream
nginx 主配置文件加入 upstream myapp1 {server 192.168.124.101:5051;server 192.168.124.102:5052;server 192.168.124.111:5050;}站点配置文件中加入 location / {proxy_pass http://myapp1;}80端口映射到外网域名配置方法 加入红框中的代码 upstream myapp3 {server 192.16…...
idea 插件推荐
idea 插件推荐 RESTFul-Tool 接口搜索Show Comment 代码注释展示translation 翻译(注释翻译)MyBatisCodeHelperPro 日志封装sql xml跳转GitToolBox 展示GIT提交Jenkins Control idea jenkins 集成Gitmoji Plus: Commit Button GIT提交moji表情 RESTFul-Tool 接口搜索 https://…...
【Linux】Linux环境基础开发工具_5
文章目录 四、Linux环境基础开发工具Linux小程序---进度条git 未完待续 四、Linux环境基础开发工具 Linux小程序—进度条 上篇我们实现了一个简易的进度条,不过那仅仅是测试,接下来我们真正的正式实现一个进度条。 接着编写 processbar.c 文件 然…...
Java Web学习笔记15——DOM对象
DOM: 概念:Document Object Model: 文档对象模型 将标记语言的各个组成部分封装为对应的对象: Document: 整个文档对象 Element:元素对象 Attribute: 属性对象 Text:文本对象 Comment&a…...
中电联系列一:rocket手把手教你理解中电联协议!
分享《一套免费开源充电桩物联网系统,是可以立马拿去商用的!》 第1部分:总则 Charging and battery swap service information exchange for electric vehicles Part 1:General 前 言 T/CEC102—2016《 电动汽车充换电服务信息交换》分为四…...
(面试官问我微服务与naocs的使用我回答了如下,面试官让我回去等通知)微服务拆分与nacos的配置使用
微服务架构 正常的小项目就是所有的功能集成在一个模块中,这样代码之间不仅非常耦合,而且修改处理的时候也非常的麻烦,应对高并发时也不好处理,所以 我们可以使用微服务架构,对项目进行模块之间的拆分,每一…...
冯喜运:6.7今日黄金原油行情分析及独家操作策略
【黄金消息面分析】:周三(6月5日),金价回升逾1.2%,收盘报每盎司2,355.49美元,全面收复前一交易日的跌幅。周三当天前公布的美国民间就业数据弱于预期,增强了美联储将在今年晚些时候降息的预期&a…...
Android 蓝牙概述
一、什么是蓝牙 蓝牙是一种短距离(一般10m内)无线通信技术。蓝牙技术允许固定和移动设备在不需要电缆的情况下进行通信和数据传输。 “蓝牙”这名称来自10世纪的丹麦国王哈拉尔德(Harald Gormsson)的外号。出身海盗家庭的哈拉尔德统一了北欧四分五裂的国…...
Python3 笔记:字符串的 find()、rfind()、index()、rindex()
1、find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中…...
【研发日记】Matlab/Simulink软件优化(二)——通信负载柔性均衡算法
文章目录 前言 背景介绍 初始代码 优化代码 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩》 背景介绍 在一个嵌入式软件开发项目中,需要设计一个ECU节点的CAN网路数据发送,需求是在500k的通信波特率上&a…...
Python 设计模式(行为型)
文章目录 策略模式场景示例 迭代器模式场景示例 访问者模式场景示例 观察者模式场景示例 命令模式场景示例 模板方法模式场景示例 模板方法模式场景示例 事件驱动模式场景示例 责任链模式场景示例 中介者模式场景示例 状态模式场景示例 策略模式 策略模式(Strategy…...
电商API商品数据采集接口||助力电商企业采集商品大数据提高开发效率
提高开发效率:电商API接口允许不同的应用程序之间高效地进行交互,节省了大量的人力物力成本,使得开发者可以将更多时间和精力集中于自身的核心业务。 增加数据安全性:通过对数据进行安全加密,API接口实现了对数据的保护…...
Day34 事件聚合器实现消息过滤功能
当前章节,实现了消息事件过滤功能 在上一章节中,我们发现在Login视图页和Main视图页都使用了同一个事件聚合器,导致在Login视图页发送的消息也被Main 视图主页所接收,这违反了事件传递的意图和模块化设计的原则。为了解决这个问题,我们需要为事件聚合器引入消息过滤的…...
前端 JS 经典:Reflect 本质
1. 什么是 Reflect Reflect 可以调用对象的基本方法(内部方法),在 ES6 之前我们是没有任何方法去直接调用对象的基本方法的。只能间接调用,间接调用它又会给你做一些额外得事。 2. 对象的基本方法 什么是对象的基本方法呢&…...
accelerate 的一个tip:early stopping 处可能存在的bug
在分布式训练中进行提前停止时,如果每个进程都有特定的停止条件(例如验证损失),这可能不会在所有进程中同步。 因此,可能在进程 0 中发生中断,而进程 1 则不会——>这将导致代码无限期挂起,直…...
企业数据挖掘建模平台极简建模流程
泰迪智能科技企业数据挖掘建模平台是企业自主研发,面向企业级用户的快速数据处理构建模型工具。平台底层算法基于R语言、Python、Spark等引擎,使用JAVA语言开发,采用 B/S 结构,用户无需下载客户端,可直接通过浏览器进…...
使用pkg打包了一个使用了sqlite3的nodejs项目,启动后闪退
从截图来看,问题出在 sqlite3 模块上。说明在打包过程中,sqlite3 模块的 .node 文件没有正确加载。 紧急解决方法: 其实就是exe文件还需要node_modules中的sqlite3 依赖,我们直接在系统顶级放一个node_modules,且其中只…...
网络编程(UPD和TCP)
//发送数据 //UDP协议发送数据 package com.example.mysocketnet.a02UDPdemo;import java.io.IOException; import java.net.*;public class SendMessageDemo {public static void main(String[] args) throws IOException {//发送数据//1.创建DatagramSocket对象(快递公司)//…...
cesium 之 flyTo、setView、lookat
orientation配置项的参数 cesium中,朝向orientation,通常使用heading、pitch、roll这三个参数来描述 heading 通过调整heading的值,使相机朝向特定的方向朝向方向说明【北:0, 东:π/2弧度, …...
Git 本地版本控制极简使用笔记(Qt 项目专用)
核心原则全程仅需掌握5 个核心命令,满足日常开发、版本记录、回滚修复的全部需求,无需复杂操作,适配传感器环筛管理平台项目一、基础准备(已完成,备查)1. 仓库初始化(仅执行 1 次)# …...
如何解决ViPER4Windows兼容性难题?5步打造Windows 10/11音效增强终极方案
如何解决ViPER4Windows兼容性难题?5步打造Windows 10/11音效增强终极方案 【免费下载链接】ViPER4Windows-Patcher Patches for fix ViPER4Windows issues on Windows-10/11. 项目地址: https://gitcode.com/gh_mirrors/vi/ViPER4Windows-Patcher 副标题&…...
Kandinsky-5.0-I2V-Lite-5s短视频质量控制:5秒内关键帧稳定性与抖动抑制技巧
Kandinsky-5.0-I2V-Lite-5s短视频质量控制:5秒内关键帧稳定性与抖动抑制技巧 1. 引言:为什么需要关注短视频质量 当你使用Kandinsky-5.0-I2V-Lite-5s生成短视频时,是否遇到过这些问题:画面突然跳变、主体运动不连贯、镜头移动卡…...
剪映高级感文字动画素材合集 预设+教程全整理
平时做口播视频时,总觉得文字动画的精致度跟不上内容节奏,找适配的素材又要花不少时间,所以最近整理了一份剪映高级感口播动态文字动画素材合集,涵盖预设、教程和配套排查资料,今天分享给有同样需求的朋友。 一、素材合…...
FFM Arena内存管理失效引发Native OOM?深度拆解Java 22 JEP 464中Scoped Memory Model的3种安全模式切换策略
第一章:FFM Arena内存管理失效引发Native OOM?深度拆解Java 22 JEP 464中Scoped Memory Model的3种安全模式切换策略Java 22 引入的 JEP 464 — Scoped Memory Model,旨在为 Foreign Function & Memory API(FFM)提…...
告别手动逐个校验,用快马快速构建vmware密钥批量验证工具提升效率
告别手动逐个校验,用快马快速构建vmware密钥批量验证工具提升效率 最近在帮朋友处理一批VMware16的密钥验证工作,发现手动逐个检查不仅耗时耗力,还容易出错。特别是当需要验证几十甚至上百个密钥时,这种重复劳动简直让人崩溃。于…...
Qwen3-VL-2B实战:快速搭建一个能“看懂”图片的智能聊天机器人
Qwen3-VL-2B实战:快速搭建一个能"看懂"图片的智能聊天机器人 1. 项目介绍与核心能力 1.1 什么是视觉语言模型 视觉语言模型(Vision-Language Model)是一种能够同时理解图像和文本的AI技术。不同于传统聊天机器人只能处理文字&am…...
Oracle19c EM Express配置与访问全攻略:从零到可视化管理的实践指南
1. 环境准备与基础检查 第一次接触Oracle 19c EM Express时,很多人会直接跳进配置环节,结果往往被各种报错打得措手不及。我刚开始接触时也犯过这个错误,后来才发现做好前期检查能省去80%的麻烦。下面这些准备工作,建议你逐项打勾…...
BYD 高通8155 OTA项目 我写的一篇专利
草根不要在BYD写专利,我24年1月初开始撰写,24年6月份才提交到专利公司,被驳回是因为有对比文件公开了我的发明点,是重庆赛力斯 4月份公开的,部门内部流程审核极慢,集团IPR找各种理由能拖上你半年࿰…...
别再只建网站了!宝塔面板的‘Node项目’功能,让你的Express/Koa后端服务上线更简单
解锁宝塔面板的隐藏技能:Node.js后端服务一键部署实战指南 你是否还在为Node.js项目的繁琐部署流程而头疼?手动配置PM2、Nginx反向代理、环境变量设置...这些操作不仅耗时耗力,还容易出错。其实,你每天都在使用的宝塔面板早已内置…...


