Necesito aclarar la pregunta de por qué necesitamos el operador de resolución de alcance o el puntero this
para acceder a los miembros heredados públicamente de una clase base de plantilla. Según tengo entendido, es para agregar claridad, pero ¿cómo agrega this
más claridad que solo señalar que es miembro de la clase?Acceso a miembros de datos de plantilla heredados públicos
Para aclarar mi pregunta he agregado un código.
#include <iostream>
using namespace std;
template <class T, class A>
class mypair {
public:
T a, b;
public:
mypair (T first, T second)
{a=first; b=second;}
virtual void printA()
{
cout<<"A"<<a<<endl;
cout<<"B"<<b<<endl;
}
};
template <class T, class A>
class next: mypair<T,A>
{
public:
next (T first, T second) : mypair<T,A>(first, second)
{
}
void printA()
{
cout<<"A:"<<mypair<T,A>::a<<endl; // this->a; also works
cout<<"B:"<<mypair<T,A>::b<<endl; // this-b; also works
}
};
int main() {
next<double,float> newobject(100.25, 75.77);
newobject.printA();
return 0;
}
de salida:
A:100.25
B:75.77
Si quito el alcance (o este operador), entonces el error de falta de alcance viene. Pero, ¿por qué necesitamos un alcance para miembros heredados públicamente?
Algunas reflexiones sobre esto serían geniales.
Interesante Leer ¿Este es un caso especial solo con plantillas? – Sii
Solo en funciones en la clase de plantilla. –