Resumen de C++ (1): espacio de nombres, referencia, sobrecarga de funciones y salida en formato cout

En los últimos años, el código del proyecto se ha escrito en lenguaje C, y se puede decir que los demás están básicamente olvidados. En el futuro, es posible que algunos proyectos de Linux deban escribirse en C++, por lo que decidí revisar y resumir la sintaxis de C++ y el uso de algunas bibliotecas, principalmente algunos contenidos resumidos para uso futuro. Esta serie de artículos se actualiza de vez en cuando. Para facilitar el conocimiento, varias partes se resumirán en un artículo. Este artículo presentará los conceptos de espacios de nombres, referencias, sobrecarga de funciones y salida con formato cout.

1 espacio de nombres

Los espacios de nombres se refieren a varios bloques que se pueden crear en un programa para agrupar todos los objetos similares y pueden referirse a todas las variables, funciones o clases dentro del bloque. De esta forma, podemos crear ámbitos separados y reutilizar los mismos nombres de variables que existen en diferentes espacios de nombres en el programa. El uso de espacios de nombres nos permite trabajar con archivos en múltiples bibliotecas. Las características del espacio de nombres son las siguientes:

  • Los espacios de nombres solo se pueden declarar globalmente
  • Los espacios de nombres pueden anidar otros espacios de nombres

1. Declaración de espacio de nombres

namespace namespacename 
{
	//code declarations where m and n are declared in namespace_name's scope
	int m, n;
}

Podemos usar operadores ::para acceder a variables o funciones en un espacio de nombres:

namespace_name :: variablename
namespace_name :: functionname

Si un espacio de nombres no tiene nombre, se puede acceder explícitamente a las variables y funciones especificadas en él de la misma manera que a las variables globales.
2. Anidamiento de espacios de nombres
Ejemplo:

namespace example1 {
  namespace example2 {
    namespace example3 {
      int sample;
    }
  }
}

variable de acceso sample:

example1::example2::example3::sample.

3. usando el espacio de nombres
Al usar la directiva de uso y la sintaxis que se muestra a continuación, puede insertar el espacio de nombres completo en una pieza de código:

using namespace namespacename;

El ejemplo más común de este uso es: using namespace std, que se usa para acceder al espacio de nombres denominado estándar, que incluye los objetos de E/S de C++ cout y cin.
4. Ejemplo
Aquí hay un ejemplo:

#include <iostream>

using namespace std;
//Creating nested namespaces
namespace no1 {
  // Declaring variable within the namespace no1
  int sample = 10;
  namespace no2 {
    namespace no3 {
      // Declaring variable within the namespace no3 
      // that initializes to the variable sample in namespace no1
      int sample1 = sample;
    }
  }
}
//Creating namespace that allows us to use it explicitly to access a variable in the nested namespace
namespace myalias = no1::no2::no3;
//Creating namespace demo and declaring an initialized variable
namespace demo {
  int gvar = 200;
}
//Inserting the entire namespace demo into our code
using namespace demo;

int main() {
  //Accessing the variable without the scope resolution operator as it is a global namespace
  cout << "Value of global variable in demo namespace = " << gvar << "\n";
  //Accessing the value of sample1 using the namespace myalias
  cout << "Value of sample1 in nested namespace third = " << myalias::sample1 << "\n";
  return 0;
}

5. Resumen
Mediante el uso de espacios de nombres, podemos evitar conflictos en archivos con los mismos nombres de variables y nombres de funciones en el mismo programa. El uso de espacios de nombres para definir el mismo código en diferentes archivos y bibliotecas puede mejorar la legibilidad del código.

2 citas

Cuando una variable se declara como referencia, se puede usar como un alias para una variable existente. Esto es muy similar a los punteros en lenguaje C, pero para lenguajes como PHP y Java, no hay punteros, sino el concepto de referencias. Esto se debe a que no utilizan los registros del chip del sistema operativo, y la mayoría de ellos se utilizan en memoria variable definida por ellos mismos. Pero muchos programadores descuidados accederán a punteros nulos, y para referencias, evita esto.

En lenguaje C, & puede usarse para obtener la dirección de una variable, y en C++, & también puede usarse para declarar una referencia. Veamos un ejemplo

int a = 100;
int &b = a;
cout << "a = " << a << ",b = " << b <<endl;
cout << "&a = " << &a << ",&b = " << &b <<endl;
--------------
output:
a = 100,b = 100
&a = 0x61fe14,&b = 0x61fe14

Es decir, las direcciones de ay bson las mismas, y podemos cambiar el valor en la misma memoria mediante ao .b

  • A diferencia de los punteros, a las referencias se les debe asignar un valor cuando se inicializan y no se pueden cambiar después de la inicialización, por lo que la referencia anterior se puede entender como una declaración constante de un puntero: int * const p = &a.
  • Cuando el tipo de referencia se declara constcomo , el compilador generará una variable temporal cuando el tipo del parámetro de referencia declarado por la función participante real sea inconsistente o el parámetro no sea un valor l. Por ejemplo const double &a, si el parámetro es 1 o se pasa un número de coma flotante 1.0 int, el compilador creará una variable anónima temporal y permitirá que aapunte a ella.Esta variable anónima solo existe durante la llamada a la función.
  • Referencia como valor de retorno de función: si el valor de retorno de la función no se declara como referencia, el valor de retorno se almacenará primero en una ubicación temporal y luego se copiará en la variable que contiene el valor de retorno de la función. Y si el valor de retorno de la función es una referencia, se copiará directamente de la variable original.

sobrecarga de 3 funciones

C++ tiene una nueva característica: polimorfismo. Significa que aparecen diferentes formas bajo ciertas condiciones. Para las funciones, se permite que las funciones tengan múltiples formas. De manera similar, la sobrecarga de funciones en C++ significa que puede tener múltiples funciones con el mismo nombre pero diferentes parámetros. El compilador resuelve funciones relacionadas comparando parámetros.

  • La sobrecarga de funciones no tiene nada que ver con el tipo de retorno de la función, si y solo cuando dos funciones tienen el mismo tipo de retorno, diferentes tipos de parámetros o número de parámetros, se pueden definir como sobrecarga

ejemplo:

int demo(int a, int b);
int demo(int c, int d, int e);
int demo(float c, float d);

Salida con formato de 4 pistas

Cuando se trata de salida formateada en C++ cout, los archivos de encabezado proporcionan algunas funciones y manipuladores adicionales para un mayor control sobre la precisión y el formato de la salida. Las siguientes son algunas funciones y operadores comunes:
1. Establecer la precisión de los números de coma flotante en n dígitos
std::setprecision(n) : std::cout << std::setprecision(4) << myFloatgenerar números de coma flotante con una precisión de cuatro dígitos.
2. Establezca el formato de salida de los números de punto flotante en notación de punto fijo (el número de lugares decimales es fijo)
std::fixed : std::cout << std::fixed << myFloatsalida de números de punto flotante en notación de punto fijo.
3. Establezca el formato de salida de los números de coma flotante en notación científica
std::scientific : std::cout << std::scientific << myFloatgenere números de coma flotante en notación científica.
4. Establezca el ancho del campo en n caracteres
std::setw(n) : std::cout << std::setw(8) << myStringconfigure el ancho del campo en 8 caracteres.
5. Establezca el carácter de relleno en c
std::setfill(c) : std::cout << std::setfill('*') << std::setw(10) << myStringestablezca el ancho del campo en 10 caracteres y rellene la parte en blanco con asteriscos.
6. Haga que la salida esté alineada a la izquierda
std::left : std::cout << std::left << std::setw(10) << myStringlos campos alineados a la izquierda son la salida.

  • std::rightAlineado a la derecha (predeterminado)

Supongo que te gusta

Origin blog.csdn.net/tilblackout/article/details/131118389
Recomendado
Clasificación