Setter不使用重载运算符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Setter不使用重载运算符相关的知识,希望对你有一定的参考价值。

我正在制作一个重载运算符,可以增加或减少小时数。我添加了验证,如果秒或分钟超过60,它们会相应地更改值。为此,我正在使用setter,但他们没有工作。我读了一下这个,发现我需要引用参数(?)而不是复制它们但不知道该怎么做。这是我的(部分)代码:

    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) 
";
            std::cin >> h1;
            std::cin >> m1;
            std::cin >> s1;

            std::cout<<"Hora de final: (Hora minutos segundos)
";
            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: 
";
            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) 
";
        std::cin >> h1;
        std::cin >> m1;
        std::cin >> s1;

        std::cout<<"Hora de final: (Hora minutos segundos)
";
        std::cin >> h2;
        std::cin >> m2;
        std::cin >> s2;

        FormatoHora horaS1(h1,m1,s1);
        FormatoHora horaS2(h2,m2,s2);

        std::cout<<"La clase dura: 
";
        FormatoHora horaFinalSuma = horaS1 + horaS2;
        std::string nombre =horaFinalSuma.to_String();
        std::cout << nombre;

    }

以上是关于Setter不使用重载运算符的主要内容,如果未能解决你的问题,请参考以下文章

如何使用运算符重载来简化两个分数的添加?

导航架构片段重载问题

打字稿getter / setter重载

刚接触 c++ 和重载运算符,不确定如何使用该函数

运算符 + 重载 C++

片段交互回调:onAttach() vs setter