[Kde-devel-es] Dudas muy basicas

Antonio Larrosa Jiménez kde-devel-es@mail.kde.org
Wed, 11 Dec 2002 00:14:34 +0100


El Martes, 10 de Diciembre de 2002 22:55, Gerard escribió:
> Unas pequeñas dudas sobre el manual de antonio larrosa y de c++
>

Como ya Ignacio te contesta a la perfección, yo sólo voy a hacer algunos 
comentarios adicionales.

>  KMenuBar *menu = menuBar();
>


El método menuBar simplemente nos devuelve la barra de menús actual, si es 
la primera vez que se llama, la crea para nosotros (usando new 
internamente), y si ya está creado el menú, sólo nos devuelve un puntero, 
con lo que no hace falta que guardemos en otra variable el puntero a la 
barra de menú, sino que basta con llamar a esa función cuando lo 
necesitemos.

> -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 ();
>

Como dice Ignacio, generalmente se usa para llamar a funciones estáticas en 
las que no hay un objeto sobre el que operen, pero no es el único caso.
También se puede usar para indicar la clase base a la que pertenece una 
función que queremos llamar en un método virtual.

Suponte que tenemos:

class A
{
public:
   A() { };
   
   virtual int foo(int x) { return x+1; }; // Por ejemplo
};

class B : public A
{
public:
   B() : A() { };

   int foo(int x);
};

Y queremos que la función foo de B devuelva 0 si x es negativo y lo que 
devuelva la función foo de A si es positivo o 0 . Entonces se define como:

int B::foo(int x)
{
   if ( x < 0 ) return 0;
   return A::foo(x);
}

ya que si pones sólo

 if (x<0) return 0;
 return foo(x);

estarías llamando recursivamente a la misma función foo de B.

Saludos,

--
Antonio Larrosa Jimenez
KDE developer - larrosa@kde.org
http://developer.kde.org/~larrosa/
Anonymity is a shield from the tyranny of the majority.