设置器不适用于重载运算符

Setters not working with overloaded operators

本文关键字:重载 运算符 适用于 不适用 设置      更新时间:2023-10-16

我正在制作一个重载运算符,该运算符可以增加或减去小时数。我添加了一个验证,因此如果秒或分钟超过 60,它们会相应地更改值。为此,我正在使用二传手,但它们不起作用。我对此进行了一些了解,发现我需要引用参数(?(而不是复制它们,但不确定该怎么做。这是我的(部分(代码:

    FormatoHora operator+(const FormatoHora &hi, const FormatoHora &hf) {
    int ht, mt, st;
    ht = hi.horas+hf.horas;
    mt = hi.minutos+hf.minutos;
    st = hi.segundos+hf.segundos;
    FormatoHora resultado = *new FormatoHora(ht,mt,st);
    resultado.corregirHora(resultado);
    return resultado;
}
    bool FormatoHora::corregirHora(FormatoHora &i) {
    int v1,v2,v3;
    v1 = getHoras();
    v2 = getMinutos();
    v3 = getSegundos();
        if (v3>60) {
            v3 = v3 - 60;
            v2++;
            //setMinutos(v2);
            //setSegundos(v3);
        }
        if (v2>60) {
            v2 = v2 - 60;
            v1++;
            //setHoras(v1);
            //setMinutos(v2);
        }
        if (v1>24) {
            v1 = v1 - 24;
            //setHoras(v1);
        }
    std::cout << v1;
    std::cout << v2;
    std::cout << v3;
    setHoras(v1);
    setMinutos(v2);
    setSegundos(v3);
    }

我知道它正在工作,因为当我调试时,变量中的值确实发生了变化,但 main 的最终输出显示了原始的未经验证的值。主要(部分(:

    if (opcion == 1) {
            std::cout<<"Hora de inicio: (Hora minutos segundos) n";
            std::cin >> h1;
            std::cin >> m1;
            std::cin >> s1;
            std::cout<<"Hora de final: (Hora minutos segundos)n";
            std::cin >> h2;
            std::cin >> m2;
            std::cin >> s2;
            FormatoHora horaS1 = *new FormatoHora(h1,m1,s1);
            FormatoHora horaS2 = *new FormatoHora(h2,m2,s2);
            std::cout<<"La clase dura: n";
            FormatoHora horaFinalSuma = horaS1 + horaS2;
            horaFinalSuma.to_String();
        }

这个问题很容易解决,但我没有注意到它。这是最终代码CPP(部分(:

    FormatoHora operator+(const FormatoHora &hi, const FormatoHora &hf) {
    int ht, mt, st;
    ht = hi.horas+hf.horas;
    mt = hi.minutos+hf.minutos;
    st = hi.segundos+hf.segundos;
    FormatoHora resultado(ht,mt,st);
    resultado.corregirHora(resultado);
    return resultado;
}
bool FormatoHora::corregirHora(FormatoHora &i) {
    int v1,v2,v3;
    v1 = i.getHoras();
    v2 = i.getMinutos();
    v3 = i.getSegundos();
        if (v3>60) {
            v3 = v3 - 60;
            v2++;
            //setMinutos(v2);
            //setSegundos(v3);
        }
        if (v2>60) {
            v2 = v2 - 60;
            v1++;
            //setHoras(v1);
            //setMinutos(v2);
        }
        if (v1>24) {
            v1 = v1 - 24;
            //setHoras(v1);
        }
    i.setHoras(v1);
    i.setMinutos(v2);
    i.setSegundos(v3);
    }
void FormatoHora::setHoras(const int &h) {
    this->horas = h;
}
void FormatoHora::setMinutos(const int &m) {
    this->minutos = m;
}
void FormatoHora::setSegundos(const int &s) {
    this->segundos = s;
}

主要(部分(:

if (opcion == 1) {
        std::cout<<"Hora de inicio: (Hora minutos segundos) n";
        std::cin >> h1;
        std::cin >> m1;
        std::cin >> s1;
        std::cout<<"Hora de final: (Hora minutos segundos)n";
        std::cin >> h2;
        std::cin >> m2;
        std::cin >> s2;
        FormatoHora horaS1(h1,m1,s1);
        FormatoHora horaS2(h2,m2,s2);
        std::cout<<"La clase dura: n";
        FormatoHora horaFinalSuma = horaS1 + horaS2;
        std::string nombre =horaFinalSuma.to_String();
        std::cout << nombre;
    }