constructor.function(constructor)如何将同一个类的对象传递给函数?

时间:2014-02-21 17:52:23

标签: c++

所以,我刚刚离开考试,最后一个问题有一个问题,要求你找到两个圆圈是否重叠给定它们的中心点(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);
}

1 个答案:

答案 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";
}