//如果你在Point类中没有定义=操作符,则系统使用默认的=操作符,
//就是把成员变量复制到对应的成员变量中,
//如果你自己想定义赋值运算符(=)则需要自己实现,
//自己定义(或者叫重载)赋值运算符号,通常是在你定义
//的类里面有资源分配时这样做,如下:
//(建议你看看赋值运算符的重载)
class Point
{
public:
Point()
{
x = 0;
y=0;
pData = NULL;
}
~Point()
{
delete pData;
pData = NULL;
}
Point(int xx,int yy);
Point(Point& p);
Point & operator = (Point &NewValue)//自己写赋值操作(重载Point类的=操作符)
{
this->x = NewValue.x;
this->y = NewValue.y;
this->pData = new int;
*pData = *(NewValue.pData);//如果不自己重载赋值操作,则只会对指针浅拷贝,即,
//新生成的类中此指针没有分配空间,而是指向了别个类已有的空间
return *this;
}
private:
int x;
int y;
int *pData;//类内部有通过指针分配的空间
};
Point::Point(int xx,int yy){
x=xx;
y=yy;
pData = new int;
*pData = x + y;
}
Point::Point(Point& p){
x=p.x-1;
y=p.y-1;
pData = new int;
*pData = *(p.pData);
}
int _tmain(int argc, _TCHAR* argv[])
{
Point p(1,1);
Point p2 = p; //此处才调用拷贝构造(此处是构造并初始化)
Point p3;
p3 = p; //此处是赋值运算,不是构造
getchar();
return 0;
}
温馨提示:答案为网友推荐,仅供参考