关于c++深拷贝

来源:百度知道 编辑:UC知道 时间:2024/06/09 07:01:59
#include<iostream>
using namespace std;
class Point
{
public:
Point()
{
X=Y=0;cout<<"default"<<endl;
}
Point(int xx,int yy)
{
X=xx;Y=yy;cout<<"constructor"<<endl;
}
~Point()
{
cout<<"defaultcall"<<endl;
}
int GetX(){return X;}
int GetY(){return Y;}
void Move(int x,int y)
{X=x;Y=y;}
private:
int X,Y;
};
class ArrayOfPoints
{
public:
ArrayOfPoints(ArrayOfPoints& pointsArray);
ArrayOfPoints(int n)
{
numberOfPoints=n;points=new Point[n];
}
~ArrayOfPoints()
{
cout<<"deleting"<<endl;
numberOfPoints=0; delete[]points;
}
Point& Element(int n)
{return points[n];}
private:
Point *points;
int numberOfPoints;
};
ArrayOfPoints::ArrayOfPoints(Array

Point& Element(int n)

前面的Point&定义一个Point类型的引用。
表明此参数按地址而不是按值传递。

当然此处指返回值而已。

引用和指针很相似,只是使用方便一些:

/*指针实例*/
int a;
int *b=&a;
(*b)=2;
/*通过b这个指针把a的值改为了2*/
-------------------
/*引用实例*/
int a;
int &b=a;
b=2;
/*通过b这个引用把a的值改为了2*/

引用在C++中很常用的,你应该多翻翻C++的书。

=============================
深度拷贝是什么?

其实就是针对指针或引用的特殊处理而已。任何面向对象的程序都要解决的问题。

一个对象A里面有一个指针指向一堆数据,你现在想把这个对象拷贝一份B,那么这个指针怎么办?如果默认的话,指针的内容被拷贝,那么拷贝后的对象B和之前的对象A中的指针指向的是同一个数据。这样就是“浅拷贝”。如果B中修改了这些数据,A那边一样会变,因为二者的数据其实是同一个。这在有些时候会出问题。

而“深拷贝”就是,自己处理这些指针,给B重新分配一块内存,然后把指针指向的数据也拷贝一份,这样A和B就完全独立,互相没有影响。

深拷贝其实不是很难的,只是一些内存管理上的技巧方式罢了。
如果有兴趣的话,把你的问题发到我邮件上吧(ichenq@hotmail.com),一起讨论讨论,研究研究吧!
或者baidu Hi也可以

Point& Element(int n)
是说函数Element(int n)
的返回值是Point类型的引用

不是 取地址 是 返回值 是一个Point的引用
深拷贝 我理解 就是 自己 写一个 拷贝 构造函数 不用 编译器 默认的 应为 你用了 Point *points;