Diferencia entre espacio de nombres y clase

Las clases son tipos de datos. Son un concepto ampliado de estructuras , pueden contener miembros de datos, pero también pueden contener funciones como miembros, mientras que un espacio de nombres es simplemente una forma abstracta de agrupar elementos. Un espacio de nombres no se puede crear como un objeto; Piense en ello más como una convención de nomenclatura. Se utiliza como información adicional para diferenciar funciones, clases, variables, etc. similares con el mismo nombre disponible en diferentes bibliotecas. En esencia, un espacio de nombres define un alcance. Los siguientes son algunos puntos para justificar:

1. Un espacio de nombres es una forma de agrupar identificadores para que no entren en conflicto. El uso de una clase implica que puede crear una instancia de esa clase, lo que no ocurre con los espacios de nombres.

2. Puede usar declaraciones de uso con espacios de nombres, y eso no es posible con clases a menos que derive de ellas.

3. Puede volver a abrir un espacio de nombres y agregar elementos en las unidades de traducción. No puede hacer esto con las clases. Por ejemplo: –

namespace A {
int f1();
}
  
namespace A {
int f2();
}

es legal, pero:

class A {
    int f1();
};
  
class A { // illegal
    int f2();
};

no es.

4. Puede tener espacios de nombres sin nombre, pero no puede tener una clase sin nombre. Por ejemplo:

namespace { // fine
  
// some code....
}
  
class { // illegal
}

5. Si la longitud de un nombre hace que el código sea difícil de leer, o es tedioso escribirlo en un archivo de encabezado donde no se pueden usar directivas de uso, podemos crear un alias de espacio de nombres que sirva como abreviatura del nombre real. Por ejemplo:

#include <iostream>
  
namespace foo {
    namespace bar {
        namespace baz {
            int qux = 42;
        }
    }
}
  
namespace fbz = foo::bar::baz;
  
int main()
{
    std::cout << fbz::qux << '\n';
}

Producción :

 42 

En caso de clase tenemos que usar typedef.

class Car {
public:
    typedef std::vector<Wheel> WheelCollection;
    WheelCollection wheels;
};

Publicación traducida automáticamente

Artículo escrito por Ram Sinha y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *