c++远征之封装篇(拷贝构造函数)

C++自学笔记       本文是根据慕课网James Yuan的《C++远征》视频学习总结的,如果大家对该视频教程感兴趣,可以参考如下网址:https://www.imooc.com/course/list?c=cplusplus  ,另外网上有网友对该教程进行了文字总结,非常详尽有用,具体可参考网址:https://www.cnblogs.com/kkdd-2013/p/5370094.html 。    ... 阅读详情
拷贝构造函数
/****************************************/
示例安排:
             1.定义一个Array类,数据成员为m_iCount,成员函数包括数据封装、构造函数、拷贝构造函数和析构函数,通过此示例体会浅拷贝原理。
             2.增加数据成员m_pArr,并增加m_pArr地址查看函数,同时改造构造函数、拷贝构造函数和析构函数,体会拷贝的原理和必要性。
/****************************************/
1.浅拷贝构造函数
/*Array.h*/
class Array
{
public:
	Array();
	~Array();
	Array(const Array &arr);
	void setCount(int count);
	int getCount();

private:
	int m_iCount;
};

/*Array.cpp*/
#include<iostream>
#include"Array.h"
using namespace std;

/*构造函数*/
Array::Array()
{
	cout << "Array" << endl;   //刷刷存在感
}

/*析构函数*/
Array::~Array()
{
	cout << "~Array" << endl;  //刷刷存在感
}

/*拷贝构造函数*/
Array::Array(const Array &arr)
{
	m_iCount = arr.m_iCount;
	cout << "Array&" << endl;   //刷刷存在感
}

void Array::setCount(int count) 
{
	m_iCount = count;
}

int Array::getCount()
{
	return m_iCount;
}

/*demo.cpp*/
#include<iostream>
#include<stdlib.h>
#include"Array.h"
using namespace std;

int main(void)
{
	Array arr1;
	arr1.setCount(5);
	Array arr2(arr1);
	cout <<"arr2.m_iCount "<<arr2.getCount()<< endl;
	system("pause");
	return 0;
}


运行结果:


结果分析:创建arr1对象时,调用构造函数,打印Array,将arr1复制给arr2的时候,调用拷贝构造函数

2.深拷贝构造函数
/*Array.h*/
class Array
{
public:
	Array(int count);
	~Array();
	Array(const Array &arr);
	void setCount(int count);
	int getCount();
	void printAddr();
	void printArr();

private:
	int m_iCount;
	int *m_pArr;
};

/*Array.cpp*/
#include<iostream>
#include"Array.h"
using namespace std;

/*构造函数*/
Array::Array(int count)
{
	m_iCount = count;
	m_pArr = new int[m_iCount];      //申请一段内存
	for (size_t i = 0; i < m_iCount; i++)
	{
		m_pArr[i] = i;
	}
	cout << "Array" << endl;         //刷刷存在感
}

/*析构函数*/
Array::~Array()
{
	//释放内存
	delete[]m_pArr;
	m_pArr = NULL;
	cout << "~Array" << endl;  //刷刷存在感
}

/*深拷贝构造函数*/
Array::Array(const Array &arr)
{
	m_iCount = arr.m_iCount;
	//先申请一段内存,然后将要拷贝的内存一个个复制到新内存
	m_pArr = new int[m_iCount];
	for (size_t i = 0; i < m_iCount; i++)
	{
		m_pArr[i]= arr.m_pArr[i];
	}
	
	
	cout << "Array&" << endl;   //刷刷存在感
}

void Array::setCount(int count) 
{
	m_iCount = count;
}

int Array::getCount()
{
	return m_iCount;
}

void Array::printAddr()
{
	cout << "m_pArr的值是:" << m_pArr << endl;
}

void Array::printArr()
{
	for (size_t i = 0; i < m_iCount; i++)
	{
		cout << m_pArr[i] << endl;
	}
}

/*demo.cpp*/
#include<iostream>
#include<stdlib.h>
#include"Array.h"
using namespace std;

int main(void)
{
	Array arr1(5);
	Array arr2(arr1);
	arr1.printArr();         //打印arr1中的值
    arr2.printArr();         //打印arr2中的值
	system("pause");
	return 0;
}



结果分析:第一个调用的是构造函数,第二个调用的是拷贝构造函数,然后输出的是arr1中的值,接着输出的是arr2中的值。

关于浅拷贝和深拷贝的总结:
1.当数据成员中含有指针时,浅拷贝会使两个对象的成员指针指向相同的内存地址
2.不是所有的对象都需要深拷贝,应该根据情况合理使用
3.深拷贝不是简单的值拷贝,而是将指针成员指向的内存数据也进行拷贝




CesiumJS【Basic】- #002 加载在线瓦片地图数据 cesiumjs 加载各类在线地图数据 阅读详情

相关推荐

RT-Thread NANO V4.1.1 在Cortex-M0上移植踩坑记:解决内存分配宏导致的线程创建失败

本文详细记录了RT-Thread NANO V4.1.1在Cortex-M0平台移植过程中遇到的内存分配宏配置问题,导致线程创建失败的解决方案。通过分析内存管理算法宏定义,将RT_USING_SMALL_MEM替换为RT_USING_SMALL_MEM_AS_HEAP,成功解决了线程创建问题,为开发者提供了实用的移植经验。

weixin_29189373的博客 306

C++封装函数对数组进行操作

【代码】C++封装函数对数组进行操作。

qq_52196400的博客 419

SAP成本核算变式OKKN配置详解:从CK11N到CK24,手把手教你搞定标准成本发布

本文深入解析SAP成本核算变式OKKN的配置原理与实战应用,涵盖从CK11N到CK24的标准成本发布全流程。详细讲解数量结构控制、价值结构配置及间接费用计算规则,帮助成本会计精准掌握标准成本计算逻辑,解决BOM版本选择、工艺路线获取等常见问题,提升企业成本管理效率。

weixin_27219587的博客 288

C++深拷贝浅拷贝

拷贝构造函数分为深拷贝和浅拷贝,浅拷贝是将对象的成员依次进行赋值操作,而深拷贝则是将对象中若是存在指针成员,将指针成员所指向的成员依次进行赋值操作。 Array.h class Array { public: Array(int count); Array(const Array &arr); ~Array(); void setCount(int count)

离开实践的理论是空洞的理论,没有理论指导的实践是盲目的实践 467

永不消逝的电波 -GSM空口信号的接收与解码

一开始接触软件无线电应该是从很早之前对RFID洗衣卡的解密开始的,后来接触人员定位,慢慢的打开了这样一扇大门。。。。 翻到之前做的GSM信号的接收解码,今天就对其过程做一个记录,也不是什么新颖的内容,权当是记录和回忆了。 对于GSM网络的相关内容,不是非常的熟悉,如有不正确的,欢迎批评指正。

Jack.Xu 专栏 1万+

智能驾驶感知模块的测试评估方法(上)

对于智能驾驶系统而言,感知模块是开发难度最大、投入资源最多的核心部分。在智能驾驶开发团队内部,感知模块需要独立进行评测才能及早发现潜在缺陷或判断性能是否有改进。随着近几年BEV、OCC、E2E等新技术方案被越来越多企业应用,感知的评测变得越来越艰难,效率也变得越来越低下。本文作者基于在智驾测试行业多年经验,试图总结感知评测的基本规律和效率提升方法,以供读者一些启发。

vincent_321的博客 2559

C语言简答题汇总

C语言简答汇总 根据网上常见的一些面试题整理,用于考研复试备考,大部分是C语言问答,但不仅仅限于C语言问答,也包括计网和操作系统相关的一些问答,内容如有错误,欢迎指正 1、c语言的特点以及C语言与Python的比较? c语言的数据类型丰富,具有现代语言的各种数据结构,能实现复杂的运算。c语言使,用灵活方便,便于实现程序的结构化,节省内存。 C语言与Python的比较: (1)首先Python的使用...

qq_40536960的博客 4万+

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

985小水博的摸鱼日常 462

C++ 拷贝构造函数中浅拷贝与深拷贝

浅拷贝构造函数 看一段拷贝构造函数的代码#include <iostream> #include <cstring> using namespace std; class Array{ public : Array(){ cout<<"Array()"<<endl; } Array(const Array &arr){ /// 拷贝构造函数

Cross 8603

量化之趋势跟踪策略

趋势跟踪策略 import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns from finance import GetData import warnings; warnings.filterwarnings('ignore') data = GetData.get_data('../data/002236.csv') .

木头大左的博客 2533

【开源电机驱动】位置环控制

这是三闭环里的最后一个:位置闭环控制。如果你认真的阅读并推导了前章节,那么这一节将会很好理解。一如既往,我会使用简练的语言来描述复杂的问题。本章节主要涉及位置环的一些概念,以及控制框图。文章不会涉及具体的代码。

BadBoyHolly的博客 6095

C++ 封装(2): 构造函数和析构函数

C++远征之封装篇(上)视频教程 笔记 方便自己查阅和复习,温故而知新。 接着C++ 封装(1) ——类和对象 继续做笔记。 目录 6 对象的生死离别 6.1 构造函数 代码示例 6.2 默认构造函数 代码示例 6.3 拷贝构造函数 构造函数总结 代码示例 6.4 析构函数 代码示例 总结 参考资料 6 对象的生死离别 对象是如何存储的? 下面举一个例...

TechArtisan6的博客 1222

猿创征文|SfM(Structure from Motion)学习之路

SfM全称Structure from Motion,译为运动恢复结构,是三维重建pipeline的一部分,又称稀疏重建,在摄影测量领域则称为空三(空中三角测量)。SfM的任务是,给定一系列具有一定重叠度的图像,去同时估计出拍摄每张图像时相机的的位姿(位置t和姿态R)和被拍摄物体或场景的稀疏点云。...............

zeeq的博客 1万+

C++远征_封装篇(上)

封装篇(上) 类和对象 类的定义: class Dog { public: char name[20]; int age; int type; void speak(); void run(); } 选择性暴露:封装 访问限定符 public protected private 对象实例化 从栈中实例化 Dog dog; Dog do...

一把健 253

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++远征之封装篇下

继C++远征之封装篇上 链接:http://blog.youkuaiyun.com/feng_8071/article/details/52650826 学而时习之,不亦说乎对象+数据成员 对象成员 对象+数组 对象数组 深拷贝 VS 浅拷贝 this指针 const :常对象 常成员函数 常对象成员一、对象数组 数组成员过大时,用对

Feng_8071的博客 514

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

C++远征之封装篇(上)

类(抽象)和对象(具体) 数据成员(属性)与成员函数(方法) 构造函数与虚构函数

茄子爱跑步的博客 258

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

c++(3)远征之封装篇(上)

1、类和对象 (1)类的定义 class  Dog//class为关键字,Dog为类名 { char name[20]; int age; int type;//数据成员,int为属性 void speak(); void run();//成员函数、方法 } (2)访问限定符 public:公共的,希望暴露 protected:受保护的 private:私有的,希望隐藏 ...

m0_37635487的博客 174

java多态天涯明月笙_6-C++远征之封装篇[上]-学习笔记

C++远征之封装篇(上)课程简介类(抽象概念),对象(真实具体)配角: 数据成员和成员函数(构成了精彩而完整的类)构造函数 & 析构函数(描述了对象的生生死死)对象复制和对象赋值 (使类的定义充满艺术)对象数组和对象指针 (将应用型态发挥到淋漓尽致)this指针(影子,贯穿大戏始终,却很少崭露头角)大家的思维模式会从面向过程到面向对象。处理更复杂程序。学完之后,搞一个迷宫的寻路程序。类和对...

weixin_39819152的博客 190

6-C++远征之封装篇[上]-学习笔记

C++远征之封装篇(上) 本文及代码收录于个人编程笔记(整理中,欢迎Star):https://github.com/mtianyan/Programming-Notebook 课程简介 类(抽象概念),对象(真实具体) 配角: 数据成员和成员函数(构成了精彩而完整的类) 构造函数 & 析构函数(描...

weixin_34056162的博客 228

C++ 封装(3): 对象成员与对象数组, 深拷贝和浅拷贝

C++远征之封装篇(下)视频教程 笔记 方便自己查阅和复习,温故而知新。 目录 1 对象成员与对象数组 代码示例 2 深拷贝和浅拷贝 代码示例 3 对象指针 4 const 再现江湖 参考资料 1 对象成员与对象数组 如下图所示,定义坐标类, 通过不同坐标可以描述一个 矩形。 那么我们有两种方式去定义和访问它,如下图所示: 那么在内存中,...

TechArtisan6的博客 2095

慕课网-C++远征之封装篇(上)-学习笔记

C++远征之封装篇(上) 简介 类(抽象概念),对象(真实具体) 附件:数据成员和成员函数(构成了精彩而完整的类) 构造函数 & 析构函数(描述了对象的生生死死) 对象复制和对象赋值(使类的定义充满艺术) 对象数组和对象指针(将应用型态发挥到淋漓尽致) this指针(影子) 面向过程到面向对象。 ...

weixin_34192732的博客 252

2019年C++再拾起

一、前言 已经将C++丢了两年时间了,出来工作后,只与C语言打交道,学的又不深,需重新学习C++远征攻略,地址: http://www.imooc.com/course/programdetail/pid/42 以下按课程学习: 二、C++远征之起航篇 1、数据类型 与C语言相比多个bool类型; 2、C++的I/O方式 cout&amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;l

Feng_8071的博客 870

网易云课堂《C++远征》笔记-优快云博客

C++简介 C++ IDE环境 C++新特性 C++输入输出 C++命名空间 综合:bool类型 命名空间 输入输出 引用 const 函数特性 内存管理 类和对象 类对象的定义 初始String 初始封装 类外定义 构造函数 构造函数初始化列表 拷贝构造函数 析构函数 对象数组 对象成员 深拷贝与浅拷贝 对象指针 对象成员指针 this指针 常对...

水月洞天 382

学习笔记 C++ 封装(上)

C++远征之起航篇与C相比: 新的数据类型:bool 新的初始化方法:int x (1024);速度上的优势 随用随定义的变量 命名空间namespace C++远征之离港篇 引用和const的用法 函数默认值、重载、内联函数、内存管理 封装篇 1、类的定义与对象实例化 2、string类型及属性封装 3、类外定义 4、构造函数与初始化列表 5、析构函数

mengyetxz的博客 364
上一篇: c++远征之封装篇(对象)
下一篇: c++远征之封装篇(对象指针)
一giao窝里giao
博客等级 码龄11年 37粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值