C++ 为什么我的字符串打印在错误的位置?

C++ 为什么我的字符串打印在错误的位置?,c++,output,operator-overloading,C++,Output,Operator Overloading,我期望这个输出: 增补:5/6/92+5/6/92=10/12/184 但我得到的结果是: 5/6/92+5/6/92=添加:10/12/184 为什么会这样 如何在不修改主函数的情况下解决此问题 #include <iostream> using namespace std; class Date { int mo, da, yr; public: Date(int m, int d, int y) { mo = m;

我期望这个输出:

增补:5/6/92+5/6/92=10/12/184

但我得到的结果是:

5/6/92+5/6/92=添加:10/12/184

为什么会这样

如何在不修改主函数的情况下解决此问题

#include <iostream>

using namespace std;

class Date {
    int mo, da, yr;
    public:
        Date(int m, int d, int y) {
            mo = m;
            da = d;
            yr = y;
        }
    friend ostream & operator << (ostream & os,
        const Date & dt);
    Date operator + (const Date & dat) const {
        Date newDate(0, 0, 0);
        newDate.mo = dat.mo + mo;
        newDate.da = dat.da + da;
        newDate.yr = dat.yr + yr;
        cout << dat << "+" << mo << "/" << da << "/" << yr << "=";
        return newDate;
    }
};

ostream & operator << (ostream & os,
    const Date & dt) {
    os << dt.mo << '/' << dt.da << '/' << dt.yr;
    return os;
}

int main() {
    Date dt(5, 6, 92);
    cout << "Addition: " << dt + dt;
}
#包括
使用名称空间std;
上课日期{
内莫,达,年;
公众:
日期(整数m、整数d、整数y){
mo=m;
da=d;
yr=y;
}

friend ostream&operator问题是
dt+dt
cout之前被评估,让我们看看
cout编译器假设它可以用
+
操作符重新排序,这是我的大学作业。这是我的问题要求。我永远不会写这样的东西。@stark他们不是我独立。首先执行+运算符。如果它以另一种方式发生,您可能会在日期中添加一个ostream,而这是不可能的。我建议您使用调试器并单步执行您的代码。这就是如何了解这些内容的方法things@Jupiter:不,斯塔克是对的。
os之间没有顺序约束
operator<<(operator<<(cout, "Addition: "), dt + dt);
// Don't forget to remove cout statements from the overloaded +
void printThenAdd(Date dt0, Date dt1) {
    cout << "Addition: ";
    cout << dt0.mo << '/' << dt0.da << '/' << dt0.yr << " + ";
    cout << dt1.mo << '/' << dt1.da << '/' << dt1.yr;
    cout << " = " << dt0 + dt1 << endl;
}