2014-02-21 109 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"; 
} 
相关问题