C++ 构造函数(constructor)如何将同一类的对象传递给函数?

C++ 构造函数(constructor)如何将同一类的对象传递给函数?,c++,C++,所以,我刚从一个考试中出来,最后一道题有一个问题,要求你找出两个圆的中心点(x,y)和半径是否重叠。然后应该使用圆的构造函数调用函数,函数如下 c1.重叠(c2) 我不确定如何将c1和c2的值传递到函数中。看看刚才的其他代码,我的函数声明应该从 void重叠(圆圈和a) 参数Circle&a将从上面引用Circle c2,但我不知道如何传入Circle c1及其值 以下是我编写的代码: #include <string> #include <cmath> using n

所以,我刚从一个考试中出来,最后一道题有一个问题,要求你找出两个圆的中心点(x,y)和半径是否重叠。然后应该使用圆的构造函数调用函数,函数如下

c1.重叠(c2)

我不确定如何将c1和c2的值传递到函数中。看看刚才的其他代码,我的函数声明应该从

void重叠(圆圈和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);
}
#包括
#包括
使用名称空间std;
班级圈子
{
私人:
双x,y,半径;
公众:
圆(双x、双y、双半径);
{
空洞重叠(此);
}
};
无效重叠(此)
{
这个->c2;
双x3=c2.x;
双y3=c2.y;
双rad3=c2.0半径;
双z=pow(x3-x,2)+pow(y3-y,2);
双r=sqrt(z);
如果(c2.半径+半径>r)
couty1>>rad1;
cin>>x2>>y2>>rad2;
圆c1=新的圆(x1,y1,rad1);
圆圈c2=新圆圈(x2、y2、rad2);
c1.重叠(c2);
}

我希望你在考试中没有写上面的代码:)

本质上,函数
voidoverlaps(Circle&a)
应该是类
Circle
中的成员函数

正如您在问题中提到的,当调用
c1.overlaps(c2)
时,显式参数
a
将用作变量
c2
的引用

正如您在问题中没有提到的,当调用
c1.overlaps(c2)
时,隐式参数
*this
将用作变量
c1
的引用(尽管您不必显式使用它)

因此,您基本上应该定义class
Circle
,如下所示:

class Circle
{
private:
    double x, y, radius;
public:
    Circle(double x, double y, double radius);
    bool overlaps(const Circle& a) const;
};
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;
};
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";
}
然后,您应该按如下方式实现函数
重叠

class Circle
{
private:
    double x, y, radius;
public:
    Circle(double x, double y, double radius);
    bool overlaps(const Circle& a) const;
};
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;
};
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";
}
最后,在function
main
中,您可以调用function
overlaps
,如下所示:

class Circle
{
private:
    double x, y, radius;
public:
    Circle(double x, double y, double radius);
    bool overlaps(const Circle& a) const;
};
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;
};
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";
}
intmain()
{
双x1,x2,y1,y2,rad1,rad2;
cin>>x1>>y1>>rad1;
cin>>x2>>y2>>rad2;
圆c1=新的圆(x1,y1,rad1);
圆圈c2=新圆圈(x2、y2、rad2);
如果(c1.重叠(c2))

CUTHT是一个创建成员函数的尝试,但不是很好。请继续阅读C++中的相关章节。在所给出的例子中,重叠是圈的成员函数。因此,只需要将第二个圈传递到第一个。重叠函数已经可以访问第一个数据。<代码>圆圈c1=新圆圈(x1,y1,rad1);
-这不是Java,也不会起作用。再说一次,一本书可能是最好的补救办法。你想要
bool圆圈::重叠(const圆圈&a)const