所以,我刚刚离开考试,最后一个问题有一个问题,要求你找到两个圆圈是否重叠给定它们的中心点(x,y)和半径。然后你应该使用圆圈的构造函数调用函数,你的功能就像
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);
}
答案 0 :(得分: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";
}