动态数组类/对象的浅复制/对象深复制
来源:互联网 发布:双色球扫描查询软件 编辑:程序博客网 时间:2024/05/21 09:22
1.将动态数组封装成类
#include <iostream>#include <cassert>using namespace std;class Point{public:Point() :x(0), y(0){cout << "Default Constructor Called." << endl;}Point(int x, int y) :x(x), y(y){cout << "Construct called." << endl;}~Point(){ cout << "Destructor called." << endl; }int GetX() const{ return x; }int GetY() const{ return y; }void move(int newX, int newY){x = newX;y = newY;}private:int x, y;};class ArrayOfPoints{public:ArrayOfPoints(int _size) ;~ArrayOfPoints();Point& element(int index);private:Point *points; //指向动态数组首地址int size; //数组大小};ArrayOfPoints::ArrayOfPoints(int _size){size = _size;points = new Point[size];}ArrayOfPoints::~ArrayOfPoints(){cout << "Deleting ..." << endl;delete[] points;}Point& ArrayOfPoints::element(int index){assert(index >= 0 && index < size);return points[index];}int main(){int count;cout << "Please enter the count of points:";cin >> count;ArrayOfPoints points(count); //创建数组对象points.element(0).move(5, 0); //访问数组元素的成员points.element(1).move(15, 20);return 0;}
2.对象浅复制
#include <iostream>#include <cassert>using namespace std;class Point{public:Point() :x(0), y(0){cout << "Default Constructor Called." << endl;}Point(int x, int y) :x(x), y(y){cout << "Construct called." << endl;}~Point(){ cout << "Destructor called." << endl; }int GetX() const{ return x; }int GetY() const{ return y; }void move(int newX, int newY){x = newX;y = newY;}private:int x, y;};class ArrayOfPoints{public:ArrayOfPoints(int _size) ;~ArrayOfPoints();Point& element(int index);private:Point *points; //指向动态数组首地址int size; //数组大小};ArrayOfPoints::ArrayOfPoints(int _size){size = _size;points = new Point[size];}ArrayOfPoints::~ArrayOfPoints(){cout << "Deleting ..." << endl;delete[] points;}Point& ArrayOfPoints::element(int index){assert(index >= 0 && index < size);return points[index];}int main(){int count;cout << "Please enter the count of points:";cin >> count;ArrayOfPoints pointsArray1(count); //创建数组对象pointsArray1.element(0).move(5, 0); //访问数组元素的成员pointsArray1.element(1).move(15, 20);ArrayOfPoints pointsArray2(pointsArray1); //调用默认的复制构造函数cout << "Point_0 of Array2:" << pointsArray2.element(0).GetX() << "," << pointsArray2.element(0).GetY() << endl;cout << "Point_1 of Array2:" << pointsArray2.element(1).GetX() << "," << pointsArray2.element(1).GetY() << endl;pointsArray1.element(0).move(25, 30);pointsArray1.element(1).move(35, 40);cout << "After the moving of pointsArray1:" << endl;cout << "Point_0 of Array2:" << pointsArray2.element(0).GetX() << "," << pointsArray2.element(0).GetY() << endl;cout << "Point_1 of Array2:" << pointsArray2.element(1).GetX() << "," << pointsArray2.element(1).GetY() << endl;return 0;}对象1的改变引起对象2(浅复制得到)的改变。
3.对象的深复制
#include <iostream>#include <cassert>using namespace std;class Point{public:Point() :x(0), y(0){cout << "Default Constructor Called." << endl;}Point(int x, int y) :x(x), y(y){cout << "Construct called." << endl;}~Point(){ cout << "Destructor called." << endl; }int GetX() const{ return x; }int GetY() const{ return y; }void move(int newX, int newY){x = newX;y = newY;}private:int x, y;};class ArrayOfPoints{public:ArrayOfPoints(int _size) ;~ArrayOfPoints();Point& element(int index);ArrayOfPoints(const ArrayOfPoints& pointArray);private:Point *points; //指向动态数组首地址int size; //数组大小};ArrayOfPoints::ArrayOfPoints(int _size){size = _size;points = new Point[size];}ArrayOfPoints::~ArrayOfPoints(){cout << "Deleting ..." << endl;delete[] points;}Point& ArrayOfPoints::element(int index){assert(index >= 0 && index < size);return points[index];}ArrayOfPoints::ArrayOfPoints(const ArrayOfPoints& v){size = v.size;points = new Point[size];for (int i = 0; i < size; i++){points[i] = v.points[i];}}int main(){int count;cout << "Please enter the count of points:";cin >> count;ArrayOfPoints pointsArray1(count); //创建数组对象pointsArray1.element(0).move(5, 0); //访问数组元素的成员pointsArray1.element(1).move(15, 20);ArrayOfPoints pointsArray2(pointsArray1); //调用默认的复制构造函数cout << "Point_0 of Array2:" << pointsArray2.element(0).GetX() << "," << pointsArray2.element(0).GetY() << endl;cout << "Point_1 of Array2:" << pointsArray2.element(1).GetX() << "," << pointsArray2.element(1).GetY() << endl;pointsArray1.element(0).move(25, 30);pointsArray1.element(1).move(35, 40);cout << "After the moving of pointsArray1:" << endl;cout << "Point_0 of Array2:" << pointsArray2.element(0).GetX() << "," << pointsArray2.element(0).GetY() << endl;cout << "Point_1 of Array2:" << pointsArray2.element(1).GetX() << "," << pointsArray2.element(1).GetY() << endl;return 0;}
对象1的改变不引起对象2的改变
0 0
- 动态数组类/对象的浅复制/对象深复制
- 数组对象的复制
- 对象的浅复制与深复制
- 对象的深复制和浅复制
- java对象的复制,浅复制、深复制
- 对象和数组的复制
- js对象、数组深复制
- 类对象的复制
- javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法
- javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法
- javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法
- javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法
- 对象,数组,字符串,数字,date的深复制浅复制问题
- JS复制对象、数组
- 数组的对象性与数组复制
- 对象克隆-深复制-浅复制
- 对象浅复制与深复制
- iOS中的复制对象 浅,深复制
- java-容器
- Java单元测试进阶之单元测试框架的出现(框架兴起)
- centOS redis安装
- App开发日报 2015-05-01 HealthKit开发之HealthKit数据操作
- 并行计算知识
- 动态数组类/对象的浅复制/对象深复制
- Java单元测试进阶之单元测试利器JUnit(新手上路)
- [C++]LeetCode 7:Reverse Integer(翻转整数)
- 题目1135:字符串排序 Java/c++
- c++_vector
- 第四章作业4
- 基于MFC的电子名片管理系统
- Java单元测试进阶之单元测试利器JUnit(测试自动化)
- Cocos2d-2.x_使用系统时间来获取随机数