Итак, я только что вышел из экзамена, и в последнем вопросе возник вопрос, который потребовал от вас найти, перекрываются ли два круга с учетом их центральных точек (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);
}
Надеюсь, вы не указали вышеприведенный код на своем экзамене :)
По сути, функция 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";
}