程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 對象-C++類的組合的構造函數問題

對象-C++類的組合的構造函數問題

編輯:編程綜合問答
C++類的組合的構造函數問題

為什麼構建Line的時候要4次拷貝構造函數point,另外為什麼拷貝構造line2的時候,又要調用2次point的拷貝構造函數。
Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2){}
這種寫法是組合類的拷貝構造特有的麼,這是什麼意思,特別是後面的p1(xp1),p2(xp2)。

 #include<iostream>
#include<cmath>
using namespace std;

class Point
{
public:
     Point(int xx=0,int yy=0)
    {
          X=xx; Y=yy;
          cout<<"Point構造函數被調用"<<endl;
    }
     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<<"Point拷貝構造函數被調用!"<<endl;
}
//類的組合
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)
{
    cout<<"Line構造函數被調用"<<endl;
    double x=double(p1.GetX()-p2.GetX());
    double y=double(p1.GetY()-p2.GetY());
    len=sqrt(x*x+y*y);
}

//組合類的拷貝構造函數
Line::Line(Line &L):p1(L.p1),p2(L.p2)
{
    cout<<"Line拷貝構造函數被調用"<<endl;
    len=L.len;
}

int main()
{
    Point myp1(1,1);
    Point myp2(4,5);//建立Point類的對象
    Line line(myp1,myp2);
    Line line2(line);
    cout<<"The length of the line is:";
    cout<<line.GetLen()<<endl;
    cout<<"The length of the line2 is:";
    cout<<line2.GetLen()<<endl;
    return 0;
}

最佳回答:


# Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2){}//解釋4次的原因:

# 首先這個方法是Line的構造函數,它有2個參數,類型為Point,(注意:不是引用(Point&),也不是指針(Point*))

# 其次,冒號後面的叫構造函數的初始化列表,用於初始化成員變量

# 知道這兩點之後,那麼再來說原因:

# c++這門語言不像java,如果參數不寫成引用(Point&)或者指針(Point*),那麼再傳遞參數的時候會建立一個對象的副本。

# 再來看看這個Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2){},傳入xp1時,會去創建一個Point的對象,調用1次Point的拷貝構造,

這是第1次,同理xp2,再進行p1(xp1)時,這又會調用1次Point的拷貝構造,同理p2(xp2),因此共4次
一般來說這個方法最好這麼寫Line::Line(const Point& xp1,const &Point xp2):p1(xp1),p2(xp2){},這樣就只會調2次了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved