看源代碼: #include<iostream> #include<cmath> using namespace std; class Point{ private: int x,y; public: Point(int x,int y);//默認(rèn)形參值構(gòu)造函數(shù) 值傳遞 Point(Point& p);//拷貝構(gòu)造函數(shù) 值傳遞 int Getx();//輸出x int Gety();//輸出y void Draw();//畫點(diǎn) }; Point::Point(int x=0,int y=0){ this->x=x; this->y=y; cout<<"Point默認(rèn)形參值構(gòu)造函數(shù)被調(diào)用!"<<endl; } Point::Point(Point& p):x(p.x),y(p.y){//不能寫成 :x=p.x,y=p.y cout<<"Point拷貝構(gòu)造函數(shù)被調(diào)用!"<<endl; } int Point :: Getx(){ return x; } int Point::Gety(){ return y; } class Line{ private: Point p1,p2; double len; public: Line();//無參構(gòu)造函數(shù) 傳遞點(diǎn) Line(Point a,Point b);//內(nèi)嵌子對象構(gòu)造函數(shù) Line(Line& p);//拷貝構(gòu)造函數(shù) 傳遞點(diǎn) void Getline(); }; Line::Line(){ len=0; } Line::Line(Point a,Point b):p1(a),p2(b){//必須放在初始化列表 完成內(nèi)嵌子對象的構(gòu)造 cout<<"line 內(nèi)嵌子對象 構(gòu)造函數(shù)被調(diào)用"<<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){//拷貝構(gòu)造函數(shù) len=p.len; cout<<"Line 拷貝構(gòu)造函數(shù)被調(diào)用!"<<endl; } int main(){ Point myp1(1,2),myp2(2,4); Line myline(myp1,myp2); Line myline2(myline); cout<<"len:"<<myline2.Getline()<<endl; } 運(yùn)行的結(jié)果: Point默認(rèn)形參值構(gòu)造函數(shù)被調(diào)用! Point默認(rèn)形參值構(gòu)造函數(shù)被調(diào)用! Point拷貝構(gòu)造函數(shù)被調(diào)用! Point拷貝構(gòu)造函數(shù)被調(diào)用! Point拷貝構(gòu)造函數(shù)被調(diào)用! Point拷貝構(gòu)造函數(shù)被調(diào)用! line 內(nèi)嵌子對象 構(gòu)造函數(shù)被調(diào)用 Point拷貝構(gòu)造函數(shù)被調(diào)用! Point拷貝構(gòu)造函數(shù)被調(diào)用! Line 拷貝構(gòu)造函數(shù)被調(diào)用! len:2.23607
|
|