Los dos sintaxis que utiliza en su código (this->...
y calificados nombres) sólo son necesarios especialmente cuando hay ambigüedad o algún otro problema de búsqueda de nombre, como el nombre del escondite, la clase base de la plantilla, etc.
Cuando no hay ambigüedad u otros problemas, no necesita ninguna de estas sintaxis. Todo lo que necesita es un nombre simple sin calificar, como Write
en su ejemplo. Solo Write
, no this->Write
y no Foundation::Write
. Lo mismo se aplica al mWords
.
I.e. en su ejemplo específico, un simple Write(mWords)
funcionará perfectamente.
Para ilustrar lo anterior, si su método DoSomething
tenía mWords
parámetro, como en
DoSomething(int mWords) {
...
miembro de la clase entonces este parámetro local mWords
ocultaría heredada mWords
y que tendría que utilizar
DoSomething(int mWords) {
Write(this->mWords);
}
o
DoSomething(int mWords) {
Write(Foundation::mWords);
}
para expresar su intención correctamente, es decir, para romper el escondite.
Si su clase Child
también tuvo su propia mWords
miembro, como en
class Child : public Base, public Foundation
{
int mWords
...
entonces este nombre podría ocultar la mWords
heredada. El enfoque this->mWords
en este caso no le ayudaría Para mostrar el nombre propio, y que tendría que utilizar el nombre calificado para resolver el problema
DoSomething(int mWords) {
Write(Foundation::mWords);
}
Si sus dos clases de base tuvieron un miembro de mWords
, como en
class Base {
public:
std::string mWords;
...
};
class Foundation {
public:
int mWords;
...
continuación, en el nombre Child::DoSomething
mWords
sería ambigua, y que tendría que hacer
DoSomething(int mWords) {
Write(Foundation::mWords);
}
para resolver la ambigüedad.
Pero, de nuevo, en su ejemplo específico, donde no hay ambigüedad y sin nombre que oculta todo esto es completamente innecesario.
tiene sentido. ¡Gracias! –