[Kde-devel-es] Dudas muy basicas

David García Garzón kde-devel-es@mail.kde.org
Wed, 11 Dec 2002 00:14:09 +0100


> > -Una de c++
> >  No acabo de ver porque en determinados momentos hemos de acceder
> > a  ciertas  funciones  con los dos puntos (::),en vez de con un simple
> > punto.
> >
> >  ej:  KFileDialog::getOpenURL ();
>
> No estoy seguro, pero creo que eso sólo se puede hacer con los métodos
> estáticos... estos son lo que puedes llamar indicando el nombre de la clase
> a la que pertenecen, pero no necesitas crear una instancia de la clase. En
> este caso concreto, el método 'getOpenURL()' debe ser estático, y no
> necesitamos instanciar la clase 'KFileDialog' para usarlo, es decir, no
> necesitamos hacer esto:
>
> KFileDialog dialog = new KFileDialog();
> dialog.getOpenURL();

Ignacio tiene toda la razon. Ademas esa sintaxis, a parte de usarse para 
llamar a metodos estaticos que no necesitan un objeto para ejecutarse, 
tambien se usa a veces para llamar a explicitamente a metodos de la 
superclase. Por ejemplo:

class Padre {
	...
public:
	virtual void unMetodo() {
		bla bla bla
	}
	static void unMetodoEstatico() {
	}
};

class Hijo : public Padre {
	...
public:
	virtual void unMetodo() {
		bla bla bla
		// Llamamos al metodo del padre, asi nos ahorramos rescribir
		// y facilitamos el mantenimiento
		Padre::unMetodo(); 
	}
};

void main () {
	Subclase foo;
	foo.unMetodo(); // Llama al que toca (el de Hijo)
	foo.Padre::unMetodo(); // Llama explicitamente al del padre
	foo.Hijo::unMetodo(); // Llama explicitamente al del hijo
	Padre::unMetodoEstatico(); // Llama al metodo estatico, no necesita objeto
}