设置器不适用于重载运算符
Setters not working with overloaded operators
我正在制作一个重载运算符,该运算符可以增加或减去小时数。我添加了一个验证,因此如果秒或分钟超过 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;
}
相关文章:
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 重载运算符new[]的行为取决于析构函数
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 在 myVector 类中重载运算符 + 时出错
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 如何在 cpp 中重载运算符 +=?
- C++ 如何重载 [] 运算符并进行函数调用
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 重载运算符有地址吗?
- 如何迭代重载运算符 [] 的类?
- 重载运算符与添加问题
- 模板基类中的重载运算符
- 如何调用用于重载运算符"<<"的 friend 函数?
- 在 C++17 中的命名空间和子命名空间中重载运算符是不明确的
- 重载运算符<<采用谷歌 C++ 风格
- C++ 如何正确重载 + 运算符
- cout (<<) 重载运算符不打印减去的矩阵
- 如何在 c++ 中重载运算符 + 以便能够 whrite c_str = "smth" + c_str;
- 重载运算符*以获取对另一个类的实例的引用