看源代码: #include<iostream> #include<cmath> using namespace std; class Point{ private: int x,y; public: Point(int x,int y);//默认形参值构造函数 值传递 Point(Point& p);//拷贝构造函数 值传递 int Getx();//输出x int Gety();//输出y void Draw();//画点 }; Point::Point(int x=0,int y=0){ this->x=x; this->y=y; cout<<"Point默认形参值构造函数被调用!"<<endl; } Point::Point(Point& p):x(p.x),y(p.y){//不能写成 :x=p.x,y=p.y cout<<"Point拷贝构造函数被调用!"<<endl; } int Point :: Getx(){ return x; } int Point::Gety(){ return y; } class Line{ private: Point p1,p2; double len; public: Line();//无参构造函数 传递点 Line(Point a,Point b);//内嵌子对象构造函数 Line(Line& p);//拷贝构造函数 传递点 void Getline(); }; Line::Line(){ len=0; } Line::Line(Point a,Point b):p1(a),p2(b){//必须放在初始化列表 完成内嵌子对象的构造 cout<<"line 内嵌子对象 构造函数被调用"<<endl; double x=double(a.Getx()-b.Getx()); double y=double(a.Gety()-b.Gety()); len=sqrt(x*x+y*y); } Line::Line(Line& p):p1(p.p1),p2(p.p2){//拷贝构造函数 len=p.len; cout<<"Line 拷贝构造函数被调用!"<<endl; } int main(){ Point myp1(1,2),myp2(2,4); Line myline(myp1,myp2); Line myline2(myline); cout<<"len:"<<myline2.Getline()<<endl; } 运行的结果: Point默认形参值构造函数被调用! Point默认形参值构造函数被调用! Point拷贝构造函数被调用! Point拷贝构造函数被调用! Point拷贝构造函数被调用! Point拷贝构造函数被调用! line 内嵌子对象 构造函数被调用 Point拷贝构造函数被调用! Point拷贝构造函数被调用! Line 拷贝构造函数被调用! len:2.23607
|
|