-
-
[旧帖] [分享]c++组合类构造函数、拷贝构造函数 实例分析 0.00雪花
-
发表于: 2015-11-11 15:06 1410
-
#include <iostream>
#include <cmath>
using namespace std;
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+1; //运算后对拷贝对象赋值
Y=p.Y+2; //注意运算结果对应的初始值
cout<<"Point拷贝构造函数被调用 ";
cout<<X<<" "<<Y<<"\n";
}
class Line
{
public:
Line(Point xp1,Point xp2);
Line(Line &);
double GetLen(){
return len;
}
private:
Point p1,p2;
double len;
};
Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2) //xp1,xp2形实结合时 ,以xp1 xp2初始化p1 p2 时 4次调用Point拷贝构造函数
//形实结合时从右到左,初始化时按出现顺序
//同类间册初始化即是拷贝过程,
//形实结合 从固定地址 拷贝到临时地址
//组合类构造函数 结构:类名::类名(参数列表):内嵌对象(参数列表)
{
cout<<"Line构造函数被调用"<<endl;
double x = double(p1.GetX()-p2.GetY());
double y = double(p1.GetY()-p2.GetY());
len = sqrt(x*x + y*y);
}
Line::Line(Line &L):p1(L.p2),p2(L.p1) //L是对象名 以L中的p1,初始化拷贝目标的p2 同类间的初始化即是拷贝过程
{
cout<<"Line拷贝构造函数被调用"<<endl;
len = L.len;
}
int main()
{
Point myp1(1,1),myp2(4,5); //只调用Point构造函数
Line line(myp1,myp2); //将调用4次Point拷贝构造函数,将调用Line构造函数
//myp1 myp2对应 Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2) 中xp1 xp2
Line line2(line); //将调用2次Point拷贝构造函数,将调用Line拷贝构造函数
/* cout<<"The length of the line is:";
cout<<line.GetLen()<<endl;
cout<<"The length of the line2 is:";
cout<<line2.GetLen()<<endl;
*/
}
#include <cmath>
using namespace std;
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+1; //运算后对拷贝对象赋值
Y=p.Y+2; //注意运算结果对应的初始值
cout<<"Point拷贝构造函数被调用 ";
cout<<X<<" "<<Y<<"\n";
}
class Line
{
public:
Line(Point xp1,Point xp2);
Line(Line &);
double GetLen(){
return len;
}
private:
Point p1,p2;
double len;
};
Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2) //xp1,xp2形实结合时 ,以xp1 xp2初始化p1 p2 时 4次调用Point拷贝构造函数
//形实结合时从右到左,初始化时按出现顺序
//同类间册初始化即是拷贝过程,
//形实结合 从固定地址 拷贝到临时地址
//组合类构造函数 结构:类名::类名(参数列表):内嵌对象(参数列表)
{
cout<<"Line构造函数被调用"<<endl;
double x = double(p1.GetX()-p2.GetY());
double y = double(p1.GetY()-p2.GetY());
len = sqrt(x*x + y*y);
}
Line::Line(Line &L):p1(L.p2),p2(L.p1) //L是对象名 以L中的p1,初始化拷贝目标的p2 同类间的初始化即是拷贝过程
{
cout<<"Line拷贝构造函数被调用"<<endl;
len = L.len;
}
int main()
{
Point myp1(1,1),myp2(4,5); //只调用Point构造函数
Line line(myp1,myp2); //将调用4次Point拷贝构造函数,将调用Line构造函数
//myp1 myp2对应 Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2) 中xp1 xp2
Line line2(line); //将调用2次Point拷贝构造函数,将调用Line拷贝构造函数
/* cout<<"The length of the line is:";
cout<<line.GetLen()<<endl;
cout<<"The length of the line2 is:";
cout<<line2.GetLen()<<endl;
*/
}
赞赏
赞赏
雪币:
留言: