this->
es necesario cuando se utiliza el miembro directamente sería ambiguo. Esto podría suceder con el código de la plantilla.
Considera:
#include <iostream>
template <class T>
class Foo
{
public:
Foo() {}
protected:
void testing() { std::cout << ":D" << std::endl; }
};
template <class T>
class Bar : public Foo<T>
{
public:
void subtest() { testing(); }
};
int main()
{
Bar<int> bar;
bar.subtest();
}
Este fallará ya llamar a la prueba() depende de un parámetro de plantilla. Decir que quiere decir la función que tendrá que hacer el mensaje this->testing();
o Foo<T>::testing();
error:
temp.cpp: In member function ‘void Bar<T>::subtest()’:
temp.cpp:16:32: error: there are no arguments to ‘testing’ that depend on a template parameter, so a declaration of ‘testing’ must be available [-fpermissive]
temp.cpp:16:32: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
¿Por qué no lo haces y lo intentas? .. esto-> solo se necesita cuando hay ambigüedad (por ejemplo, el primer caso, donde el parámetro tiene prioridad, pero hay otras situaciones, como algunos casos de plantilla poco claros). – falstro
Sé lo que funciona y lo que no solo me refiero a cuál es el POO correcto – jmasterx
OOP adecuado no tiene ningún comentario sobre el tema. Al igual que la ubicación de la abrazadera, es una cuestión de estilo de codificación. – stonemetal