不定义拷贝构造函数也能用如下方式初始化对象吗?

来源:百度知道 编辑:UC知道 时间:2024/05/05 03:23:48
如下函数没有定义point类的拷贝构造函数,但是试用了p1(sp1)的形式初始化了对象p1.

源程序如下:

#include<iostream.h>
#include<math.h>
class point
{
public:
point(double xx=0,double yy=0){x=xx;y=yy;}

double getx(){return x;}
double gety(){return y;}
private:
double x,y;
};

class distance
{
public:
distance(point sp1,point sp2);

double getdist(){return dist;}
private:
point p1,p2;
double dist;
};
distance::distance(point sp1,point sp2):p1(sp1),p2(sp2)
{
cout<<"distance构造函数被调用"<<endl;
double a=p1.getx()-p2.getx();
double b=p1.gety()-p2.gety();
dist=sqrt(a*a+b*b);
}
void main()
{
point myp1(1,1),myp2(5,2);
distance mydist(myp1,myp2);
cout<<"两点间的距离是:"<<mydist.getdist()<<endl;
}

编译器自动添加默认拷贝构造函数. 请注意深拷贝和浅拷贝.

可以,如果没有定义复制构造函数,编译器可以帮你生成一个默认的拷贝构造函数。如果类中有指针成员,一般需要自己定义拷贝构造函数。