Namespaces y alcance
Parte de la sección Programación Orientada a Objetos del Journey de C++ de Coddy — lección 4 de 104.
Los espacios de nombres agrupan código relacionado y evitan conflictos de nombres. El operador de resolución de ámbito :: accede a los elementos dentro de un espacio de nombres.
Creación de un espacio de nombres
namespace MathTools {
int add(int a, int b) {
return a + b;
}
}Acceso con resolución de ámbito ::
int result = MathTools::add(5, 3); // result = 8Uso de la directiva para evitar escribir el espacio de nombres cada vez
using namespace MathTools;
int result = add(5, 3); // Lo mismo que MathTools::add(5, 3)El espacio de nombres std
std::cout << "Hello" << std::endl;
// o
using namespace std;
cout << "Hello" << endl;Los espacios de nombres organizan el código y evitan colisiones de nombres. El espacio de nombres std contiene todas las características de la biblioteca estándar de C++ como cout, cin, string y endl.
Desafío
IntermedioCrea funciones dentro del espacio de nombres MathTools:
add(int a, int b)— devuelve la sumamultiply(int a, int b)— devuelve el producto
Decláralas en MathTools.h e impleméntalas en MathTools.cpp.
Hoja de referencia
Los espacios de nombres (namespaces) agrupan código relacionado y evitan conflictos de nombres. El operador de resolución de ámbito :: accede a los elementos dentro de un espacio de nombres.
Creación de un espacio de nombres:
namespace MathTools {
int add(int a, int b) {
return a + b;
}
}Acceso con resolución de ámbito :::
int result = MathTools::add(5, 3); // result = 8Uso de la directiva using para evitar escribir el espacio de nombres cada vez:
using namespace MathTools;
int result = add(5, 3); // Same as MathTools::add(5, 3)El espacio de nombres std contiene todas las características de la biblioteca estándar de C++ como cout, cin, string y endl:
std::cout << "Hello" << std::endl;
// or
using namespace std;
cout << "Hello" << endl;Pruébalo tú mismo
#include <iostream>
#include "MathTools.h"
int main() {
int a, b;
std::cin >> a >> b;
std::cout << "Add: " << MathTools::add(a, b) << std::endl;
std::cout << "Multiply: " << MathTools::multiply(a, b) << std::endl;
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosConstrucción y compilación en C++Archivos de cabecera y archivos fuenteNamespaces y alcanceIntroducción a OOP en C++Clases vs ObjetosEl puntero 'this'Métodos (Funciones miembro)Atributos (Miembros de datos)Conceptos básicos de Ctors y DtorsResumen - Calculadora simple4Propiedades de clase
Miembros de instancia vs. estáticosGetters y SettersFunciones miembro constPalabra clave mutableMétodos y variables estáticosFunciones y clases amigasResumen - Gestor de cuentas bancarias7Herencia
Herencia básicaNiveles de acceso en la herenciaOrden de llamada de Ctor y DtorSobrescritura de métodosFunciones virtuales y VTableHerencia múltipleHerencia virtualResumen - Jerarquía de empleados2Gestión de memoria
Memoria Stack vs HeapPunteros y referenciasMemoria dinámica (new/delete)Punteros inteligentes en C++RAII en C++Resumen - Gestor de arrays dinámicos5Encapsulamiento
Especificadores de acceso en C++Especificadores de acceso en profundidadOcultamiento de informaciónStruct vs ClassClases anidadas e internasResumen - Sistema de registros de estudiantes8Polimorfismo
Polimorfismo: Compilación vs. Tiempo de ejecuciónSobrecarga de funcionesFunciones virtuales revisadasFunciones virtuales purasClases abstractasDiseño de interfaces en C++Dynamic Casting y RTTIResumen: Calculadora de figuras11Conceptos avanzados de POO
Composición vs. HerenciaMixins mediante CRTPIdioma PimplBorrado de tiposEnum Classes y tipado fuerteManejo de excepciones en POOJerarquías de excepciones personalizadas14Patrones de diseño - Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositeRAII como patrón3Constructores y Destructores
Constructor por defectoConstructor parametrizadoConstructor de copiaConstructor de movimientoListas de inicialización del constructorConstructores delegadosAnálisis profundo del destructorRegla de tres / cinco / ceroResumen - Clase String6Sobrecarga de operadores
Introducción a la sobrecarga de operadoresSobrecarga de operadores aritméticosSobrecarga de operadores de comparaciónOperadores de flujo (Stream)Sobrecarga del operador de asignaciónSobrecarga de los operadores [] y ()Operadores de conversión de tiposResumen - Clase Matrix9Plantillas
Plantillas de funcionesPlantillas de clasesEspecialización de plantillasPlantillas variádicasConceptos básicos de SFINAE y Type TraitsResumen - Contenedor genérico