c++问题1

来源:百度知道 编辑:UC知道 时间:2024/05/14 17:02:38
请问一下当用类的一个对象(1)去初始化该类的另一个对象(2)时系统自动调用拷贝构造函数实现拷贝赋值。但是我没有给他设置拷贝构造函数,系统默认的拷贝构造函数用对象(1)初始化对象(2),他的赋值是怎么样的?我上机的时候发现,好象就是用对象(1)的值直接给对象(2)的。
class Point
{
public:
Point(int xx=0,int yy=0){X=xx; Y=yy;}
Point(Point& p);
int GetX( ) {return X;}
int GetY( ) {return Y;}
private:
int X,Y;
};
Point::Point (Point& p)
{
X=p.X;
Y=p.Y;
cout<<"拷贝构造函数被调用"<<endl;
}
void main(void)
{ Point A(1,2);
Point B(A); //拷贝构造函数被调用
cout<<B.GetX( )<<endl;
}
就象这个程序段,假如没有拷贝构造函数,系统将会怎么样初始化对象B?

不错,就是对象1的成员变量值赋给对象2相应的成员变量.
我们定义自己的拷贝构造函数就是解决系统默认的拷贝构造函数只能实现"浅层复制"而不能实现"深层复制"的问题.
如:类A中有一个指针变量p,他生成了两个对象a1和a2,假如a2是由
A a2(a1);
这样生成的,系统调用了默认的拷贝构造函数,两个对象的P都指向同一个内存空间,改变一个的值,同时另一个也会改变,这是我们不希望出现的,所以要自己定义一个拷贝构造函数.

编译错误。

如果没有定义自己的拷贝构造函数,系统会生成一个默认的拷贝构造函数,他只是执行按位拷贝的操作。