El objetivo de la abstracción de los establecedores y captadores es que el método de recuperación puede cambiar. Cuando accede directamente a la variable miembro, si algo cambia, debe actualizar su uso en todas partes. Pero si usa la función, entonces cambiar la forma en que se recupera la variable solo tiene que cambiar en la función.
Ahora, porque esta es la misma clase, es mucho menos preocupante que cuando hace que las variables sean públicas, porque solo tiene que actualizar este archivo de implementación (en lugar de actualizar a cada usuario de su clase, que puede no ser posible si tienes una clase de biblioteca).
Para ver esto, consulte una clase que de repente debe ser segura para subprocesos. Ahora, la copiadora se vería
void myClass::copyVar1(myClass * dat)
{
scoped_lock lock(mutex);
var1 = dat->getVar1();
}
y no tendría que fijar en otro sitio si siempre llamado por función. Si ha accedido a la variable directamente, entonces se vería como
void myClass::copyVar1(myClass * dat)
{
scoped_lock lock(mutex);
scoped_lock lock2(dat->mutex)
var1 = dat->var1;
}
que bloquea "dat" s mutex externa a dat, por lo general no se considera un muy buen diseño (si se hacen los ingenieros tienen que recordar para bloquear los objetos de otras personas luego abres la posibilidad de que olviden y no lo hagan).
Del mismo modo, si la variable comenzara a almacenarse en una base de datos, tendría que manejar eso también. O si la variable ahora se almacenó en dos variables diferentes y se construyó cuando se recuperó, puede ver cómo aumentaría la complejidad.
Pero recuerde, la filosofía de diseño del uso de accessors y mutators es reducir la complejidad potencial a través de la encapsulación. Hay ocasiones en las que se trabaja en proyectos más pequeños (especialmente proyectos personales) en los que no se tiene la intención de cambiar alguna vez la clase. Puede ser menos complejo acceder a ellos directamente. No tengas miedo de hacerlo, solo debes saber por qué estás tomando la decisión.
También vea [Son funciones get y set populares entre los programadores C++] (http://stackoverflow.com/questions/737409/are-get-and-set-functions-popular-with-c-programmers) –