Registro de aprendizaje: hablar sobre las similitudes y diferencias entre el lenguaje C y C++

Tabla de contenido

1. Introducción

dos, la diferencia 

1. Orientado a objetos y orientado a procesos

2. Diferencias gramaticales - Citas

3. Aspectos de palabras clave

4. En términos de sufijos

5. Acerca de la constante

 6. Sobre la aplicación y liberación de espacio de memoria

7. El nuevo tipo de datos bool

8. Pensamiento funcional, sobrecarga funcional...

1. Introducción

Me inscribí en la Copa Blue Bridge este año. Durante el proceso de aprendizaje, descubrí que el lenguaje de programación de muchos tutoriales es C++. Aunque aprendí el lenguaje C en mi primer año, todavía me siento un poco desacostumbrado. decidido a aprender C++ de primera mano.

En el primer semestre del primer año, aprendí los conceptos básicos de programación: lenguaje C, un lenguaje de programación orientado a objetos;

En el siguiente semestre de mi primer año, aprendí programación orientada a objetos: Java. ¡Solo entonces comprendí lentamente la diferencia entre la orientación a objetos y la orientación a procesos!

"Nombre largamente esperado", C ++ no solo hereda las características de la programación orientada a procesos del lenguaje C, sino que también es un lenguaje de programación orientado a objetos con funciones integrales ~~

dos, la diferencia 

1. Orientado a objetos y orientado a procesos

En primer lugar, es el punto mencionado anteriormente: el lenguaje C es un lenguaje de programación orientado a procesos, y C ++ es un lenguaje de programación orientado a objetos, que se usa más ampliamente en la práctica.

2. Diferencias gramaticales - Citas

Antes de aprender C++, lo que más me preocupaba era la diferencia en la sintaxis, porque se debía principalmente a los obstáculos para comprender el código. En cuanto al canal de aprendizaje, es principalmente viendo los cursos de los programadores dark horse de la estación, lo cual es muy bueno~

Lo más impresionante es la referencia de C++, durante el proceso de aprendizaje del lenguaje C en el primer año, no tenía ningún conocimiento de este aspecto.

Los siguientes son puntos de conocimiento relevantes:

(1) Introducción a la citación

La transferencia de parámetros es esencialmente un proceso de asignación.Para tipos básicos de datos como char, bool, int y float, la memoria que ocupan suele ser de unos pocos bytes, y la copia de memoria es muy rápida.

Las matrices, las estructuras y los objetos son colecciones de una serie de datos. No hay límite para la cantidad de datos, que pueden ser pocos o decenas de miles. La copia frecuente de ellos en la memoria puede consumir mucho tiempo y ralentizar la eficiencia de la ejecución. del programa. .

En lenguaje C, al pasar este tipo de datos de tipo de agregación, se recomienda pasar punteros. Pero los punteros son engorrosos de usar y menos legibles.

Por lo tanto, C ++ ha agregado una forma más conveniente de transferir datos de tipo agregado que las referencias de punteros.

Al igual que los punteros, las referencias pueden reducir la copia de datos, mejorar la eficiencia de la transferencia de datos y son más convenientes y fáciles de usar que los punteros.


(2) Formato gramatical de las referencias

escriba &name = datos;
por ejemplo:

int a = 10;
int &p = a;

Una referencia se puede considerar como un alias de datos, y los datos se pueden encontrar a través de este alias y el nombre original, y la operación en la referencia es equivalente a la operación en los datos.


(3) Reglas de citación

1. La referencia es solo un alias y no ocupa memoria, comparte el mismo espacio de memoria con la variable a la que se refiere;

2. Las referencias solo se definen con &, y se usan como variables ordinarias sin &;

3. La referencia se debe inicializar cuando se crea. Una vez que se inicializa la referencia, la variable a la que apunta la referencia no se puede cambiar, de forma similar a una constante de puntero.

4. La referencia debe estar asociada con una cierta unidad de memoria legal, y no hay una referencia NULL y no se puede usar;

(4) Aplicaciones referenciadas

4.1 Referencias comunes

Los datos del espacio de referencia no se pueden modificar a través del alias, y el parámetro modificado puede evitar el mal funcionamiento del espacio de referencia en la función;
formato:
tipo de datos const y alias = nombre del espacio de datos;
tipo de datos const y alias

4.2 Referencias y arreglos

①El tipo de elemento de la matriz (& alias) [número de elementos] = nombre de la matriz;

② Use typedef para alias del tipo de elemento de matriz [el número de elementos], y luego use el nuevo nombre de tipo para definir la referencia

4.3 *Las referencias actúan sobre punteros

Alias ​​​​la variable de puntero, el lenguaje C usa un puntero secundario para apuntar a un puntero, y luego opera en el espacio del puntero, C ++ puede alias el puntero para operar en el espacio del puntero.


4.4 Referencias como parámetros de función

//Referencia
//Modifica los datos en el espacio externo de la función dentro de la función
//No genera una copia del parámetro
//Es más fácil de usar que un puntero

Nota: si usa una referencia como parámetro y no desea cambiar el contenido del espacio de referencia dentro de la función, puede agregar la modificación const delante de la referencia.


4.5 Referencia como valor de retorno de una función: generalmente se usa para la iteración

Nota: No devuelva una referencia a una variable local, porque la variable local se destruirá después de que la función regrese, por lo que la referencia devuelta se convierte en una referencia "nada" y el programa entra en un estado desconocido.

(5) La naturaleza de la cita

La esencia de la referencia es la constante de puntero (puntero constante) en C++, typedef& ref = val;//typedef* const ref = &val;

La referencia es solo una encapsulación simple del puntero, y su capa inferior todavía se implementa a través del puntero. La memoria ocupada por la referencia es la misma que la longitud de memoria ocupada por el puntero, que es de 4 bytes en el entorno de 32 bits. y 8 bytes en el entorno de 64 bytes, la razón por la que no se puede obtener la dirección de la referencia es porque el compilador realiza una conversión interna. 

Resumen: No es que la variable p no ocupe memoria, sino que el compilador no le permite obtener su dirección. 


(6) La diferencia entre referencias y punteros

1. Las referencias son más convenientes y legibles que los punteros;

2. Las referencias no ocupan memoria, los punteros ocupan memoria;

3. El valor al que se hace referencia no puede ser NULL y el valor del puntero puede ser NULL;

4. Los significados de las operaciones de autoincremento (++) y autodecremento (--) de punteros y referencias son diferentes. Use ++ para punteros que apunten a la siguiente pieza de datos, use ++ para referencias para agregar 1 a los datos a los que se refiere; la autodecremento (--) es similar.


3. Aspectos de palabras clave

Después de revisar los libros de texto pertinentes, se encontró que

(1) El lenguaje C tiene 32 palabras clave (2) C++ tiene 63 palabras clave

4. En términos de sufijos

Cuando estaba haciendo experimentos de estructura de datos el semestre pasado, ya estaba usando archivos C++ por conveniencia

(1) lenguaje C: .c 

(2) C++: .cpp

5. Acerca de la constante

Las variables modificadas por const en lenguaje C no son constantes, llamadas variables constantes o variables de solo lectura.Esta variable constante no se puede usar como un subíndice de matriz. Sin embargo, las variables modificadas por const en C++ pueden usarse como subíndices de matrices y convertirse en constantes reales. Esta es la extensión de C++ a const.

const en lenguaje C: después de ser modificado, no se puede usar como un valor l, y no se puede inicializar, pero no hay posibilidad de reinicializarlo después. No se puede usar como subíndice de la matriz, pero se puede modificar a través del puntero. En pocas palabras, la diferencia entre ella y las variables ordinarias es que no puede ser un valor l. En todos los demás es lo mismo.

const en C++: constantes reales. Debe inicializarse cuando se define y puede usarse como el subíndice de la matriz. La regla de compilación de const en C++ es de reemplazo (como una macro), por lo que se considera una constante real. También se puede modificar mediante puntero. Cabe señalar que los punteros de C++ pueden degenerar en punteros del lenguaje C.

Cuando const genera símbolos, es un símbolo local. Es decir, solo es visible en este documento. Si tiene que usarlo en otros archivos, declare en el encabezado del archivo: extern cosnt int data = 10; el símbolo generado es un símbolo global.

Resumen: const en C se denomina variable de solo lectura, pero no puede ser una variable lvalue; const en C++ es una constante real, pero puede degenerar en una constante en lenguaje C, y los símbolos locales se generan de forma predeterminada.

 6. Sobre la aplicación y liberación de espacio de memoria

malloc() y free() son funciones en la biblioteca estándar que solicitan memoria dinámicamente y la liberan en lenguaje C. Y new y delete son operadores y palabras clave de C++. La capa inferior de new y delete en realidad llama a malloc y free. Se diferencian de las siguientes maneras:

1), malloc y free son funciones, new y delete son operadores.

2), malloc necesita el tamaño antes de asignar memoria, new no.

Cuando malloc necesita especificar el tamaño, también necesita conversión de tipo. No es necesario especificar el tamaño cuando es nuevo porque se puede juzgar por el tipo dado y el valor inicial también se puede asignar al mismo tiempo.

3) Malloc no es seguro y requiere conversión de tipo manual, mientras que new no requiere conversión de tipo.

Ver el artículo anterior para más detalles.

4), free solo libera el espacio, delete llama primero al destructor y luego libera el espacio (si es necesario).

En correspondencia con el elemento 5, si se usa un tipo complejo, primero destrúyalo y luego llame al operador delete para recuperar la memoria.

5), lo nuevo es llamar primero al constructor y luego solicitar espacio (si es necesario).

En correspondencia con el elemento ④, cuando llamamos new (por ejemplo, int *p2 = new int; este código), la implementación del código subyacente es: primero presione 4 bytes (tamaño del tipo int) y luego llame al operador nueva asignación de función sin memoria. Dado que nuestro código no involucra tipos complejos (como tipos de clase), no hay una llamada de constructor.

6) El método de procesamiento es diferente cuando la memoria es insuficiente (falla de desarrollo).

Si falla malloc, devuelve 0, y si new falla, se lanza una excepción bad_alloc.

7), las ubicaciones de memoria de apertura nueva y malloc son diferentes.

malloc se asigna en el área de almacenamiento dinámico y new se asigna en el área de almacenamiento libre.

8), new puede llamar a malloc(), pero malloc no puede llamar a new.

new se implementa con malloc(), y new es exclusivo de C++ y, por supuesto, no se puede llamar a malloc.

En definitiva, existe una estrecha relación entre las diferencias

7. El nuevo tipo de datos bool

La memoria ocupada es de un byte. Si la computadora es distinta de cero, significa que está establecida. Si solo es 0 o el puntero está vacío, significa que no está establecida. Generalmente, se usa como el valor de retorno de la función, o la salida normal del interruptor es 0 y 1. El método de asignación propietario de C++, falso y verdadero

8. Pensamiento funcional, sobrecarga funcional...

El aprendizaje aún no ha terminado, el intercambio continuará ~

Supongo que te gusta

Origin blog.csdn.net/m0_64198455/article/details/128583485
Recomendado
Clasificación