2014-02-21 108 views
0

所以,我剛剛離開考試,最後一個問題有一個問題,需要你找到兩個圓圈是否重疊,以給定它們的中心點(x,y)和半徑。然後您應該使用圓圈的構造函數調用該函數,並且您的功能類似於constructor.function(構造函數)如何將同一個類的對象傳遞給函數?

c1.overlaps(c2);

我不知道如何將c1和c2的值傳遞給函數。縱觀一些其他的代碼剛纔好像我的函數聲明應該與

void overlaps(Circle &a)

的論點Circle &a開始將引用從上面Circle c2,但我不知道如何Circle c1和它的尊貴會被傳入。

這是我寫的代碼:

#include <string> 
#include <cmath> 

using namespace std; 

class Circle 
{ 
    private: 
     double x, y, radius; 
    public: 
     Circle(double &x, double &y, double &radius); 
     { 
      void overlaps(this); 
     } 
}; 

void overlaps(this) 
{ 
    this -> c2; 
    double x3 = c2.x; 
    double y3 = c2.y; 
    double rad3 = c2.radius; 
    double z = pow(x3-x,2) + pow(y3-y,2); 
    double r = sqrt(z); 
    if(c2.radius + radius > r) 
     cout<<"The circles overlap.\n"; 
    else 
     cout<<"The circles do not overlap\n"; 
}; 

int main() 
{ 
    double x1, x2, y1, y2, rad1, rad2; 
    cin>>x1>>y1>>rad1; 
    cin>>x2>>y2>>rad2; 
    Circle c1 = new Circle(x1, y1, rad1); 
    Circle c2 = new Circle(x2, y2, rad2); 
    c1.overlaps(c2); 
} 
+3

這是嘗試創建成員函數,但不是很好的一個。請繼續閱讀C++書中的相關章節! –

+0

在你給出的例子中,重疊是Circle的一個成員函數。因此,您只需將第二個圓圈傳遞給第一個圓圈即可。重疊函數已經可以訪問第一個數據。 – enhzflep

+0

'Circle c1 = new Circle(x1,y1,rad1);' - 這不是Java,這不起作用。再一次,一本書可能是最好的補救措施。 – chris

回答

0

我希望你沒有寫上面的代碼在你的考試:)

實質上,函數void overlaps(Circle &a)應該是類Circle中的成員函數。

正如您在您的問題中提到的那樣,在調用c1.overlaps(c2)時,顯式參數a將用作變量c2的參考。

正如你調用c1.overlaps(c2)什麼時候在你的問題,不是提的隱含參數*this將被用作可變c1參考(雖然你不會有明確地使用它)。

所以,你應該基本定義Circle類,如下所示:

class Circle 
{ 
private: 
    double x, y, radius; 
public: 
    Circle(double x, double y, double radius); 
    bool overlaps(const Circle& a) const; 
}; 

然後,你應該實現的功能overlaps如下:

bool Circle::overlaps(const Circle& a) const 
{ 
    double z = pow(a.x-x,2) + pow(a.y-y,2); 
    double r = sqrt(z); 
    return a.radius + radius > r; 
}; 

最後,在功能main,你可以調用函數overlaps爲如下:

int main() 
{ 
    double x1, x2, y1, y2, rad1, rad2; 
    cin>>x1>>y1>>rad1; 
    cin>>x2>>y2>>rad2; 
    Circle c1 = new Circle(x1, y1, rad1); 
    Circle c2 = new Circle(x2, y2, rad2); 
    if (c1.overlaps(c2)) 
     cout<<"The circles overlap.\n"; 
    else 
     cout<<"The circles do not overlap\n"; 
} 
相關問題