RE:operador de resolucion de alcance
Consiste en poner delante de la llamada a un método el nombre de la clase a la que pertenece.
Por ejemplo, si la clase A tiene un metodo funcion(), se pondría
A::funcion();
Si es una clase normal y un metodo normal, no tiene mucho sentido. Este operador cobra sentido con:
- metodos estáticos (static). No hace falta instanciar la clase para llamar al método y hay que llamarlo poniendo delante el nombre de la clase
class A
{
public:
static void funcion();
};
Se puede llamar a
A::funcion();
pero no a
funcion();
- Método con el mismo nombre existente en varias clases que heredan unas de otras. Por ejemplo, A hereda de B y esta a su vez de C. Todas tienen el metodo funcion(). A la hora de llamar al metodo funcion(), C++ tiene una reglas para decidir a cual de los tres llama. Con el operador de ambito puedes decir explicitamente a cual quieres llamar. Aunque hay muchas posibilidades, te pongo un ejemplo.
C c = new A();
c->funcion(); /* Esto llama a funcion() de A */
B::c->funcion(); /* Esto llama a funcion() de B, no te fies mucho de la sintaxis, que no he podido comprobarla */
Se bueno.