En lugar de responder directamente a su pregunta, permítame mostrarle un ejemplo muy simple. Considere una clase simple A que tiene un doble como miembro privado.
class A{
private:
double a;
public:
A(double _a);
double
get_a();
double&
get_aref();
const double&
get_aconstref();
};
La implementación de esa clase. Muy simple
A::A(double _a): a(_a){
};
// Getters
double
A::get_a() {
return a;
}
double&
A::get_aref(){
return a;
}
const double&
A::get_aconstref(){
return a;
}
Ahora vamos al programa principal que usa la clase A.
int main(){
A ainst(6.0);
double a = ainst.get_a();
std::cout << "a = " << a << std::endl;
a++;
std::cout << "a+1 = " << a << std::endl;
std::cout << "Meanwhile, in class A, value of a = " << ainst.get_a() << std::endl;
double& aref = ainst.get_aref();
std::cout << "aref = " << aref << std::endl;
aref++;
std::cout << "aref+1 = " << aref << std::endl;
std::cout << "Meanwhile, in class A, value of a = " << ainst.get_a() << std::endl;
const double& aconstref = ainst.get_aconstref();
std::cout << "aconstref = " << aconstref << std::endl;
// aconstref++;
// std::cout << "aconstref+1 = " << aconstref << std::endl;
std::cout << "Meanwhile, in class A, value of a = " << ainst.get_a() << std::endl;
return 0;
}
lo que sólo puede hacer un
const double& aconstref = ainst.get_aconstref();
y no
double& aconstref = ainst.get_aconstref();
si un método de una clase devuelve uno de los miembros de la clase de tipo T en la forma const T &, significa que no quiere que la persona que llama cambie ese miembro. En el ejemplo anterior, T es un doble. Sustituye un std :: map en nits place y se mantiene la misma lógica. Espero que sea bastante explicativo. Si elimina las dos líneas comentadas, el compilador se queja porque está intentando cambiar esa referencia.
me gustaría escribir el mapa para reducir la repetición – Rookie
¿Para qué tienes 'b'? Esto es C++, ¡puedes tener funciones gratuitas! – sbi
@Rookie, ¡buena idea, gracias! Descansa, todo está bien? –