C++深拷贝浅拷贝
来源:互联网 发布:算法还是编码 编辑:程序博客网 时间:2024/06/05 05:37
拷贝构造函数分为深拷贝和浅拷贝,浅拷贝是将对象的成员依次进行赋值操作,而深拷贝则是将对象中若是存在指针成员,将指针成员所指向的成员依次进行赋值操作。
Array.h
class Array{public: Array(int count); Array(const Array &arr); ~Array(); 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(int i=0;i<m_iCount;i++) { m_pArr[i]=i; } cout<<"Array()"<<endl;}Array::Array(const Array &arr){ m_iCount=arr.m_iCount; m_pArr=new int[m_iCount]; for(int i=0;i<m_iCount;i++) { m_pArr[i]=arr.m_pArr[i]; } cout<<"Array(const Array &arr)"<<endl;}Array::~Array(){ delete []m_pArr; m_pArr=NULL; 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(int i=0;i<m_iCount;i++) { cout<<m_pArr[i]<<endl; }}demo.cpp
#include<iostream>#include"Array.cpp"using namespace std;/** 实例安排: 1.定义一个Arry类,数据成员为m_iCount,成员函数包括数据封装函数, 构造函数,拷贝构造函数和析构函数,通过此实例体会浅拷贝原理。 2.增加数据成员m_pArr,并增加m_pArr地址查看函数,同时改造构造函数, 拷贝构造函数和析构函数,体会深拷贝的原理和必要性。*/int main(){ Array arr1(5); //arr1.setCount(5); Array arr2(arr1); cout<<"arr2.m_iCount"<<arr2.getCount()<<endl; arr1.printAddr(); arr2.printAddr(); arr1.printArr(); arr2.printArr(); return 0;}
Array()Array(const Array &arr)arr2.m_iCount5m_pArr的值:0x9c0e20m_pArr的值:0x9c0e400123401234~Array()~Array()
0 0
- c++:什么是深拷贝什么是浅拷贝!
- OBJ-C 深拷贝 浅拷贝
- Object-c 深拷贝和浅拷贝
- c++-深拷贝与浅拷贝
- [Objective-C]浅拷贝和深拷贝
- 【c++】浅拷贝与深拷贝
- Objective-C 深拷贝与浅拷贝
- 【C++】深拷贝和浅拷贝
- 【C++】深拷贝和浅拷贝
- Objective-C浅拷贝和深拷贝
- 【C++】深拷贝和浅拷贝解析
- C中的深拷贝和浅拷贝
- [c++]深拷贝和浅拷贝
- [C++]深拷贝与浅拷贝
- 5.c++-拷贝构造函数(深拷贝,浅拷贝)
- c++_拷贝构造函数/浅拷贝/深拷贝
- 【C++】深拷贝、浅拷贝和写时拷贝
- 深拷贝&&浅拷贝
- mongodb的jar包日志文件和webservice的AxisServlet日志文件冲突
- linux下用cron定时执行任务的方法
- bzr 工具的介绍与使用
- Netty自定义协议的粘包和拆包处理
- POJ 3518 Prime Gap 可能会
- C++深拷贝浅拷贝
- 剖析Asp.Net路由系统
- hihocoder#1015:(KMP)
- 自己写控制浮点数显示位数
- Mysql注入之一 联合注入
- Linux service network restart重启网络失败
- c++中的vector
- 完美处理SpringMVC文件上传的一系列问题(无法获取参数、断点、分片等)
- c语言指针链表