2010-12-01 20 views
5

Estoy probando mi primer programa orientado a objetos útil con algún uso del espacio de nombres. Tengo una clase base B que está en el espacio de nombres NS. Si trato de heredar de esta clase base para hacer que la herencia funcione, debería usar NS :: B en la declinación de clase como se muestra a continuación, ¿es así realmente? ¿O hay un estilo más aceptado para esta sintaxis de herencia?herencia y espacios de nombres

namespace NS 
{ 
    class D: public NS::B{ 
    ... 
    }; 
} 

mejor, Umut

Respuesta

7

Si su D está en namespace NS, usted no tiene que calificar NS::B, ya D y B está en el mismo espacio de nombres. Solo puede usar class D : public B.

7

Cuando estás dentro del espacio de nombres NS, no es por lo general (1) necesidad de calificar los nombres de funciones, clases u otras entidades que se encuentran en el espacio de nombres NS. Dado:

namespace NS { 
    class B { }; 
} 

las siguientes dos definiciones de D son los mismos:

namespace NS { 
    class D : public NS::B { }; 
} 

y:

namespace NS { 
    class D : public B { }; 
} 

(1) Lookup Argumento-dependiente (ADL) puede causar algunos ugly issues, especialmente al usar plantillas, y para solucionarlos es posible que necesite calificar los nombres.

+0

supongo que hice un error en algún lugar del makefile, este es lo que esperaría también, gracias por las respuestas de todos modos. –

+0

mediante la compilación de un archivo incorrecto –

+0

@Umut: siempre puede intentar consultas sencillas de "y si" en un solo archivo mínimo. –

1

usted no necesita para denotar NS puesto que ya está dentro de ella

namespace NS 
{ 
    class D: public B{ //is fine 
    }; 
} 

Otra cosa que puede encontrar interesante más tarde es:

#include <iostream> 
int x = 10; 

int main() 
{ 
    int x = 5; 
    //This will show the local x 
    std::cout << x << std::endl; 
    //This is how you access the Global x 
    std::cout << ::x << std::endl; 

    return 0; 
} 
Cuestiones relacionadas