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不使用重载运算符的主要内容,如果未能解决你的问题,请参考以下文章