c++ “拷贝构造,运算符重载”

news2024/11/18 9:23:08

1.拷贝构造

   拷贝构造的意思为:创造一个对象并拷贝另一个对象.

  拷贝构造的名字与类的名字一致,参数一般为引用,若类中为无拷贝构造,编译器会自动生成默认拷贝构造函数,这种默认的拷贝构造函数只能拷贝内容,不能拷贝被开辟的空间,是浅拷贝,一 般关于深拷贝的都得自己写.

注意这种写法是错的,会形成无限递归。

一般的拷贝构造函数的形参会加个const,这是为了拷贝时可能被引用的对象为常性,若不加const则就扩大了其权限.

 2.operator运算符重载

和函数重载类似,但operator只能有两个形参,若写在类中的运算符重载,那就只能有一个参数,因为类中的函数都会默认带隐藏参数this指针,this指针可以在函数内使用但不能在外显示.

不能被重载的运算符只有5个, 点号. 三目运算?: 作用域访 问符:: 运算符sizeof 以及.*

用法:例如重载+=,   声明:Date& operator+=(int day);

使用时: Date A1; A1+=5.即可 参数直接放在运算符左右即可,注意在类中的重载第一个参数为this指针,所以A1只能在左侧,而全局的根据你的形参即可.

图中的()const的意思是修饰this指针.

前置++和后置++声明规定,前置++:返回类型 operator++();

                                             例如:Date& operator();

                                             后置++:返回类型 operator(int);

                                             例如   :Date operator(int);

在用户重载的前置++和后置++的性能会差距很大,因为前置是返回引用不需要创造临时变量,而后者则是临时变量需要拷贝;前后置- -也是如此。

                                                                                                                      

 重载输入/出流

 若想为类重载一个输出流,则需要返回值为cout的类型ostream& ,若写为

输出流:ostream& operator <<(ostream& out);

但这样有个问题,这个是在类中创造的,第一个参数必然是this指针,所以只能A1<<cout这样使用

看着十分别扭。

解决方案:不在类中写,在全局写,

ostream& operator<<(ostream& out,const Date& str);

这样的话即可解决,但是若要使用类中的私有成员就不行了,这里的解决方案是在类中添加友元函数friend即可:

 friend ostream& operator<<(ostream& out,const Date& str);

这样这个全局函数就可以使用类中的私有成员.

输入流,需要返回cin的类型为istream&,写在全局:

istream& operator<<(istream& in, Date& str);

也需要在类中使用友元函数:

friend istream& operator<<(istream& in, Date& str);

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装并使用JupyterLab

背景 JupyterLab 是用于笔记本、代码和数据的最新的基于 Web 的交互式开发环境。其灵活的界面允许用户配置和安排数据科学、科学计算、机器学习方面的工作流程。模块化设计邀请扩展来扩展和丰富功能。 部署 要在本机搭建 Jupyter Notebook 平台进行机器学习项目&#xff0c;…

【Python入门篇】——Python基础语法(字符串扩展和格式化的精度控制)

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; Python入门&#xff0c;本专栏主要内容为Python的基础语法&#xff0c;Python中的选择循环语句…

网络安全之IPSEC路由基本配置

目录 网络安全之IPSEC路由基本配置 IPSEC配置的前提分析 协议分析 传输模式分析​编辑 IPSEC路由中的配置 图谱图 配置公网可达 R1配置IKE SA的安全提议 R1配置 IKE SA 的身份认证信息 R3配置IKE SA的安全提议 R3配置 IKE SA 的身份认证信息 R1配置IPSEC的安全提议…

112-Linux_mysql数据库的安装

文章目录 一.数据库介绍1.数据库2.数据库的分类 二.mysql安装及设置1.安装mysql2.初始化配置(1)设置数据库不进行密码强校验(2)设置root管理员密码(3)设置是否要删除匿名用户&#xff0c;这里不删除(4)设置是否允许root用户远程登录&#xff0c;这里设置允许(5)是否删除test库&…

硬件设计 之 PCIe常用知识

以下是本人在自己在设计PCIe中常遇到的一些知识&#xff0c;对他们进行了简单整理一下&#xff0c;包括基本定义、传输速率、layout要求等。比如作为硬件工程师要了解芯片架构&#xff0c;哪些PCIe接口可以使用&#xff0c;使用这些PCIe要做什么&#xff0c;需要使用PCIe x1还是…

msvc编译opencascade和vtk

文章目录 msvc编译opencascade和vtk下载源码和第三方库开始编译VTK开始编译OCC msvc编译opencascade和vtk 下载源码和第三方库 opencascade源码 我下载的时候最新版本是7.7.0 第三方库文件 这里面标出来的是必须的文件&#xff0c;如果你需要别的&#xff0c;也可以下载其他的…

JNI开发

文件结构&#xff08;选中的为生成的&#xff09; CMake构建不需要执行命令&#xff0c;会自动生成so文件打包进apk Android mk构建需要执行命令生成so文件&#xff0c;再打包进apk。命令如下。 # 在jni目录下执行 # 生成com_demo_cppproject_OtherNdkTest.h头文件 javac -h .…

[MySQL / Mariadb] 数据库学习-Linux中二进制方式安装MySQL5.7

Linux中二进制方式安装MySQL5.7 安装安装方式官网下载安装包创建用户组mysql&#xff0c;用户和目录把下载的安装包&#xff0c;放到/home/mysql/将本地文件拷贝到远程&#xff1a; scp 文件名 –用户名计算机IP或者计算机名称:远程路径 验证包解压安装包&#xff0c;移动到/us…

【前端面试题】深拷贝的终极实现

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 引子 通过本文可以学习到深拷贝的三种写法的实现思路与性能差异 首先&#xff0c;我们要理…

Hystrix 简单聊聊断路器/熔断器

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;风间影月|慕课网讲师 什么是Hystrix Hystrix 在SpringCloud中负责服务熔断服务降级的作用。 Hystrix 存在的目的也是…

从 Elasticsearch 到 Apache Doris,10 倍性价比的新一代日志存储分析平台

作者介绍&#xff1a;肖康&#xff0c;SelectDB 技术副总裁 导语 日志数据的处理与分析是最典型的大数据分析场景之一&#xff0c;过去业内以 Elasticsearch 和 Grafana Loki 为代表的两类架构难以同时兼顾高吞吐实时写入、低成本海量存储、实时文本检索的需求。Apache Doris…

114-Linux_mysql基本操作

文章目录 一.数据库的基本操作1.数据库的登录及退出(1)连接数据库&#xff1a;(2)退出数据库 2.查看所有数据库3.显示时间4.显示数据库版本5.创建数据库6.查看创建数据库的语句7.查看当前使用的数据库8.查看当前用户9.使用某个数据库10.删除数据库 一.数据库的基本操作 1.数据…

训练计划安排(练一休一训练分化+倒金字塔训练法)

目录 练一休一训练分化每次训练的组数12-15组 &#xff08;4-5个动作&#xff09;QA 倒金字塔训练法倒金字塔热身正式组常见误区&#xff1a; 训练补剂bcaa咖啡因肌酸蛋白粉 如何降低皮质醇水平如何提升睾酮水平文献出处睡眠8h摄入适量脂肪&#xff08;0.8g每公斤体重&#xff…

【机器学习】集成学习—Boosting—GBM(Gradient Boosting Machine)解析

【机器学习】集成学习—Boosting—GBM&#xff08;Gradient Boosting Machine&#xff09;解析 文章目录 【机器学习】集成学习—Boosting—GBM&#xff08;Gradient Boosting Machine&#xff09;解析1. 介绍2. Boosting2.1 1. 强 / 弱学习器2.1.2 AdaBoost 3. GBM3.1 GBM 特例…

如何利用ChatGPT进行论文润色-ChatGPT润色文章怎么样

ChatGPT润色文章怎么样&#xff1f; ChatGPT可以润色文章&#xff0c;使用其润色功能可以为用户提供更加整洁、清晰、文采动人的文本。但需要注意以下几点&#xff1a; 需要保持文本的一致性和完整性。当使用ChatGPT进行润色时&#xff0c;需要注意保持文本的一致性和完整性。…

单调栈的学习

文章目录 单调栈的学习什么是单调栈&#xff1f;单调栈模板暴力解法单调栈解法 单调栈的简单变形1.[496. 下一个更大元素 I](https://leetcode.cn/problems/next-greater-element-i/)2.[739. 每日温度](https://leetcode.cn/problems/daily-temperatures/)3.[503. 下一个更大元…

Kali Linux 使用远程桌面连接——xrdpxfce

[笔者系统版本] [Kali]: Kali Linux 2023.1 [Kernel]: kernel 6.1.0 [Desktop]: Xfce 4.18.1 1. 前言 在 Windows 中我们会经常使用到远程桌面这样便利的工具&#xff0c;让我们随时随地都可以使用自己想要使用的电脑&#xff0c;或者同时使用多台设备&#xff0c;那么本文就将…

open3d 源码阅读image_processing.py

目录 1. open3d.geometry.Image和numpy互转 2. 对open3d.geometry.Image进行高斯过滤 3. 高斯金字塔过滤 4. sobel过滤 5. 可视化o3d.geometry.Image 1. open3d.geometry.Image和numpy互转 import numpy as np import matplotlib.pyplot as plt import matplotlib.image a…

Midjourney从入门到精通

前言 什么是AI绘画 AI 绘画&#xff0c;顾名思义就是利用人工智能进行绘画&#xff0c;是人工智能生成内容&#xff08;AIGC&#xff09;的一个应用场景。其主要原理就是收集大量已有作品数据&#xff0c;通过算法对它们进行解析&#xff0c;最后再生成新作品&#xff0c;而算…

vue框架快速入门

vue 1、第一个Vue程序1.1、什么是Vue程序1.2、为什么要使用MVVM1.3、Vue1.4、第一个vue程序 2、基础语法2.1、v-bind2.2、v-if&#xff0c; v-else2.3、v-for2.4、v-on 3、Vue表单双绑、组件3.1、什么是双向数据绑定3.2、在表单中使用双向数据绑定3.3、什么是组件 4、Axios异步…