C++类的另一个成员和重载操作符

C++类的另一个成员和重载操作符,c++,class,member,C++,Class,Member,我需要编写如下程序: #include <iostream> using namespace std; class Point { public: double X; double Y; Point(){} Point(double x, double y) { X = x; Y = y; } }; class Circle

我需要编写如下程序:

#include <iostream>

using namespace std;

class Point
{
    public:
        double X;
        double Y;

        Point(){}

        Point(double x, double y)
        {
            X = x;
            Y = y;
        }
};

class Circle
{
    public:
        Point P;
        double R;

        Circle(){}

        Circle(Point p, double r)
        {
            P = p;
            R = r;
        }

        Circle operator +(Circle C1, Circle C2)
        {
            return Circle(C1.Point, C1.R + C2.R);
        }

        Circle operator -(Circle C1, Circle C2)
        {
            return Circle(C2.Point, C1.R - C2.R);
        }
};

int main()
{
    Circle c1, c2, cr1, cr2, ck1, ck2;

    // create c1
    // create c2

    cr1 = c1 + c2;
    // display cr1
    cr2 = c2 + c1;
    // display cr2

    ck1 = c1 - c2;
    // display ck1
    ck2 = c2 - c1;
    // display ck2

    return 0;
}
编辑: 经过修正后,它看起来是这样的,并且工作得非常完美:

#include <iostream>

using namespace std;

class Point
{
    public:
        double X, Y;

        Point(){}

        Point(double x, double y)
        {
            X = x;
            Y = y;
        }
};

class Circle
{
    public:
        double R;
        Point P;

        Circle(){}

        Circle(Point p, double b)
        {
            P = p;
            R = b;
        }

        Circle operator+(const Circle& C1)
        {
            Circle C;
            C.P = this->P;
            C.R = this->R + C1.R;
            return C;
        }

        Circle operator -(const Circle& C1)
        {
            Circle C;
            C.P = C1.P;
            C.R = this->R - C1.R;
            return C;
        }
};

int main()
{
    double X, Y, R;
    cout << "Coordinates for C1:" << endl;
    cout << "\tX: ";
    cin >> X;
    cout << "\tY: ";
    cin >> Y;
    cout << "Radius for C1:";
    cin >> R;
    Circle *c1 = new Circle(Point(X, Y), R);

    cout << "Coordinates for C2:" << endl;
    cout << "\tX: ";
    cin >> X;
    cout << "\tY: ";
    cin >> Y;
    cout << "Radius for C2:";
    cin >> R;
    Circle *c2 = new Circle(Point(X, Y), R);

    Circle cs1 = c1->operator+(*c2);
    Circle cs2 = c1->operator-(*c2);

    Circle cr1 = c2->operator+(*c1);
    Circle cr2 = c2->operator-(*c1);

    cout << "cs1([" << cs1.P.X << ", " << cs1.P.Y << "], " << cs1.R << ")" << endl;
    cout << "cs2([" << cs2.P.X << ", " << cs2.P.Y << "], " << cs2.R << ")" << endl;
    cout << "cr1([" << cr1.P.X << ", " << cr1.P.Y << "], " << cr1.R << ")" << endl;
    cout << "cr2([" << cr2.P.X << ", " << cr2.P.Y << "], " << cr2.R << ")" << endl;

    char ch;
    cin >> ch;
    return 0;
}

当您将类中的运算符(如operator)定义为成员函数时,则当您使用它时

C3 = C1 + C2;
编译器实际上正在调用您的成员函数,如

C3 = C1.operator+(C2);
由此,您应该能够看出作为成员函数的运算符只接受一个参数,并且运算符中的第一个对象是this对象

对于独立的非成员函数,它们需要两个参数


您可能需要检查,例如..

是否有不正确的重载运算符。请看以下代码:

Circle operator +(const Circle& C)
{
    return Circle(this->P, this->R + C.R);
}

Circle operator -(const Circle& C)
{
    return Circle(this->P, this->R - C.R);
}

怎么了?错误对于帮助找出问题所在非常重要。有经验的程序员通常可以从错误中找出错误。你至少有一个错误:它不是C1。在操作符中它是C1.P+和C2在操作符中是一样的。你知道,你的op+/op重载-违反了最小惊讶规则。请阅读:我希望。。。我不知道,也许是工会?
Circle operator +(const Circle& C)
{
    return Circle(this->P, this->R + C.R);
}

Circle operator -(const Circle& C)
{
    return Circle(this->P, this->R - C.R);
}