【C++知识点】类和对象:友元,运算符重载,多态

今天来继续了解类和对象!

PS.本博客参考b站up黑马程序员的相关课程,老师讲得非常非常好! 

封装

深拷贝与浅拷贝 

浅拷贝:简单的赋值拷贝操作

深拷贝:在堆区重新申请空间,进行拷贝操作

首先,这是一个普通的构造函数代码:

#include<iostream>
using namespace std;class Person
{public:int m_Age;//int *m_Height;Person(){cout<<"Person的默认构造函数调用"<<endl; }Person(int age){m_Age=age;cout<<"Person的有参构造函数调用"<<endl; }~Person(){cout<<"Person的xigou函数调用"<<endl; }
};void test01()
{Person p1(18)cout<<"p1的年龄为:"<<p1.m_Age<<endl;Person p2(p1);cout<<"p2的年龄为:"<<p2.m_Age<<endl;
}int main()
{test01();return 0;
}

new:

new,是C++提供的用于动态申请存储空间的运算符。


new的使用


new+数据类型(初值),返回值为申请空间的对应数据类型的地址。
1.使用new申请一个对象

int *p = new int(10);//申请了一个初值为10的整型数据


2.使用new申请数组

int *arr = new int[10];//申请了能存放10个整型数据元素的数组,其首地址为arr


delete运算符的使用


new运算符通常搭配delete元素安抚来使用,new用来动态申请存储空间,delete用于释放new申请的空间。
语法格式如下:

delete p;
delete[] arr;//注意要删除数组时,需要加[],以表示arr为数组。

对这个代码进行一些处理:

#include<iostream>
using namespace std;class Person
{public:int m_Age;int *m_Height;Person(){cout<<"Person的默认构造函数调用"<<endl; }Person(int age,int height){m_Age=age;m_Height=new int(height);cout<<"Person的有参构造函数调用"<<endl; }~Person(){//将堆区开辟的数据释放 if(m_Height!=NULL){delete m_Height;m_Height=NULL}cout<<"Person的析构函数调用"<<endl; }
};void test01()
{Person p1(18,160);cout<<"p1的年龄为:"<<p1.m_Age<<"身高:"<<<<endl;Person p2(p1);cout<<"p2的年龄为:"<<p2.m_Age<<endl;
}int main()
{test01();return 0;
}

 会报错:

解决方法:使用深拷贝解决

Person(const Person &p){m_Age=p.m_Age;//深拷贝操作m_Height=new int(*p.m_Height);}

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

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

相关文章

「动态规划」如何求最长湍流子数组的长度?

78. 最长湍流子数组https://leetcode.cn/problems/longest-turbulent-subarray/description/ 给定一个整数数组arr&#xff0c;返回arr的最长湍流子数组的长度。如果比较符号在子数组中的每个相邻元素对之间翻转&#xff0c;则该子数组是湍流子数组。更正式地来说&#xff0c;…

VBA技术资料MF164:列出文件夹中的所有文件和创建日期

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

JAVA大型医院绩效考核系统源码:​医院绩效考核实施的难点痛点

JAVA大型医院绩效考核系统源码&#xff1a;​医院绩效考核实施的难点痛点 绩效考核数字化综合管理系统是一个基于数字化技术的管理平台&#xff0c;用于帮助企业、机构等组织进行绩效考评的各个环节的管理和处理。它将绩效考评的各个环节集成到一个系统中&#xff0c;包括目标…

Appium Android 自动化测试 -- 元素定位

自动化测试元素定位是难点之一&#xff0c;编写脚本时会经常卡在元素定位这里&#xff0c;有时一个元素能捣鼓一天&#xff0c;到最后还是定位不到。 Appium 定位方式和 selenium 一脉相承&#xff0c;selenium 中的定位方式Appium 中都支持&#xff0c;而 Appium 还增加了自己…

ciscn_2019_n_1

前戏--------checksec,运行查看 进入就可以发现这段代码 很浅显易懂 我们要得到的后面是 这里 我们要利用的漏洞是 get函数 0x30大小 加上8 exp: from pwn import * ghust remote("node5.buuoj.cn",28777) addr 0x4006BE payload bA * 0x30 bB*0x8 p64(addr…

细说MCU输出两路PWM波形及改变占空比的实现方法

目录 一、硬件及工程 二、建立工程 三、代码修改 四、下载运行 五、改变PWM波形占空比 1、定义两个全局变量 2、启动定时器 3、重写TIM3中断回调函数 六、下载并运行 一、硬件及工程 文章依赖的硬件及工程配置参考本文作者的其他文章&#xff1a;细说ARM MCU的串口接…

3D开发工具HOOPS为BIM应用提供支持:复杂大模型实现Web端轻量化!

在数字化转型的浪潮中&#xff0c;Tech Soft 3D以其HOOPS SDK工具包&#xff0c;为软件开发人员提供了强大的支持。这一工具包不仅支持Windows、Linux、OSX和移动平台等多样化的操作系统&#xff0c;还使得开发人员能够构建出庞大而复杂的建筑和BIM应用程序。HOOPS SDK的多格式…

26.2 Django简介

1. Python三大主流框架 根据当前的信息和流行度, Python的三大框架可以归纳为Django, Flask和FastAPI, 以下是对它们的清晰分点表示和归纳:* 1. Django: 一个高级的Python Web框架, 以快速开发和实用简洁的设计出名.它遵循MVC设计模式(但更倾向于MTV模式), 并提供了许多内置的…

让全栈AI的旗帜猎猎作响:“逆行者”华为云

如果有人问&#xff0c;AI大模型行业&#xff0c;最近的风向是什么&#xff1f;相信很多人都会说&#xff0c;是“内卷”。 近段时间&#xff0c;“降价”成了大模型的第一关键词。各大云服务商争相加入AI降价潮&#xff0c;甚至有公司模型降价达到了97%的惊人幅度。加上厂商抢…

数据库精选题(三)(SQL语言精选题)(按语句类型分类)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;数据库 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 创建语句 创建表 创建视图 创建索引…

汽车销售系统

摘 要 在现代社会&#xff0c;电脑是企业运作和管理必不可少的工具。我们过去用手记下卖出的商品的年代已一去不复返了。在我国&#xff0c;汽车销售行业的竞争日趋激烈的情况下&#xff0c;如何提高企业的管理水平&#xff0c;提高企业的工作效率&#xff0c;提高企业的服务质…

(vue3)基于vite+vue3+element-plus项目创建

(vue3)基于vitevue3element-plus项目创建 vue.js官方中文文档&#xff1a;https://cn.vuejs.org/guide/quick-start.html vite官方中文文档&#xff1a;https://cn.vitejs.dev/guide/ element-plus官网&#xff1a;https://element-plus.org/zh-CN/guide/installation.html 第…

经典机器学习方法(7)—— 卷积神经网络CNN

参考&#xff1a;《动手学深度学习》第六章 卷积神经网络&#xff08;convolutional neural network&#xff0c;CNN&#xff09;是一类针对图像数据设计的神经网络&#xff0c;它充分利用了图像数据的特点&#xff0c;具有适合图像特征提取的归纳偏置&#xff0c;因而在图像相…

show/hide信号演示

代码&#xff1a; #include <gtk-2.0/gtk/gtk.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <glib-2.0/glib.h> #include <stdio.h>gint delete_event(GtkWidget *window, GdkEvent *event, gpointer data) {gtk_widget_hide(window);return TRU…

SpringBoot + Vue 实现 AES 加密和 AES 工具类总结

目录 一、加密知识回顾 AES加密模式 二、Java 自定义 AES 工具类 三、SpringBoot 实现 AES 加密登陆 controller 层 server 层 四、Vue 实现 AES 加密登陆 五、前端AES工具类 六、实现结果 一、加密知识回顾 密钥是AES算法实现加密和解密的根本。对称加密算法之所以…

基于MATLAB仿真LFM线性调频信号

基于MATLAB仿真LFM线性调频信号 目录 前言 一、LFM信号简介 二、LFM信号基本原理 三、LFM信号仿真 四、代码 总结 前言 仿真中的接收信号&#xff0c;有时为了简单会直接用一个正弦波代替&#xff0c;但实际中接收到的信号极少是点频信号&#xff0c;一般都是PSK信号、OF…

MySQL事务、数据库的存储引擎

目录 1. 事务的概念 1.1事务的 ACID 2. 存储引擎 2.1 存储引擎 2.2 常用存储引擎 3.MyISAM 3.1 MyISAM 表支持 3 种不同的存储格式​编辑 3.2 适用的生产场景 4. InnoDB 4.1 InnoDB特点 4.2 适用生产场景分析 5. MyISAM 和 InnoDB 的区别 6. 命令操作 7. 死锁 7.…

计算机系统基础实训八—ProxyLab实验

实验目的与要求 1、让学生应用套接字接口实现网络编程&#xff1b; 2、让学生理解Web服务器开发的相关知识&#xff1b; 3、让学生应用并发编程技术进行并发服务器的开发&#xff1b; 实验原理与内容 Web代理是一种在Web浏览器和终端服务器之间充当中介角色的程序。在Web代…

堆排序的实现原理

一、什么是堆排序&#xff1f; 堆排序就是将待排序元素以一种特定树的结构组合在一起&#xff0c;这种结构被称为堆。 堆又分为大根堆和小根堆&#xff0c;所谓大根堆即为所有的父节点均大于子节点&#xff0c;但兄弟节点之间却没有什么严格的限制&#xff0c;小根堆恰恰相反&a…

高通安卓12-在源码中查找应用的方法

1.通过搜索命令查找app 一般情况下&#xff0c;UI上看到的APP名称会在xml文件里面定义出来&#xff0c;如 搜索名字为WiGig的一个APP 执行命令 sgrep "WiGig" 2>&1|tee 1.log 将所有的搜索到的内容打印到log里面 Log里面会有一段内容 在它的前面是这段内…