c++ 如何定义非对称+运算符

jvlzgdj9  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(182)

我试图为int + Date定义+运算符,并使其成为returnint。因此,我将operator+定义为一个成员,以定义Date + int,并定义了一个非成员函数operator+(int, Date),但当在main中使用它时,它似乎没有使用该函数,并生成了一个错误。

class Date
{   
    int D, M, Y;
public:
    Date();
    Date(int, int, int);
    ~Date(void);

    int getDay() const;
    Date operator+(Date) const;
    Date operator+(int) const;
};

Date::Date() : D{15}, Y{2012}, M{2} { }
Date::Date(int d, int m, int y) : D{d}, Y{y}, M{m} {}
Date::~Date(void) {}

int Date::getDay() const { return D; }
Date Date::operator+(Date d) const
{
    return Date(d.D + D, d.M + M, d.Y + Y);
}
Date Date::operator+(int d) const
{
    return Date(d + D,M,Y);
}

int operator+(int i,Date d) // This is what is wrong apparently.
{
    return i + d.getDay();
}

int main ()
{
    Date d = Date();
    int i = 7 + d; // This is what generates the error at compile time.
    cout << i;
    return 0;
}

相关问题