Colección de citas famosas - Slogan de motivación - Resumen de las preguntas de la entrevista en C++

Resumen de las preguntas de la entrevista en C++

El alcance de las variables globales estáticas (o variables locales estáticas) definidas en un archivo es------en este archivo

①: Permisos de herencia predeterminados:

p>

La herencia de clases se maneja según la herencia privada y la herencia de estructuras se maneja según la herencia pública

②: Permisos de acceso predeterminados de los miembros

Miembros de la clase tiene permisos privados de forma predeterminada, struct El valor predeterminado es permiso público

Nota: C++ tiene una macro incorporada __cplusplus -------Existe la costumbre de usar "__" para indicar variables internas , que son solo para uso interno; sin guiones bajos dobles, significa Variables (identificadores) de interfaces externas

Los tres métodos de transferencia de las funciones de C++ son: transferencia de valores. Paso de puntero y paso de referencia

Nota: El paso de valor y el paso de puntero son esencialmente paso de puntero.

En la clase A, fun1 es una función virtual; en la clase B, fun2 es una función virtual.

①: Mecanismo: c está orientado a procesos (c también puede ser un programa orientado a objetos); C ++ está orientado a objetos y proporciona clases. La programación orientada a objetos en C++ es más fácil que en C.

②: Dirección de uso: C es adecuado para código pequeño y situaciones de alta eficiencia, como C ++ integrado, es más adecuado para aplicaciones complejas y de nivel superior, porque la mayor parte del núcleo de Linux está escrito en C; es un software de sistema que tiene requisitos de eficiencia extremadamente altos

③: C++ es un superconjunto de c

④: el lenguaje C es un lenguaje de programación estructurado y C++ es un lenguaje orientado a objetos; lenguaje de programación.

⑤: C++ se centra en objetos en lugar de procesos, y en el diseño de clases en lugar del diseño lógico.

Lo que struct en C proporciona principalmente son tipos personalizados y la construcción de un nuevo tipo

Consistencias:

Inconsistencias:

C; lenguaje: no hay comportamiento de protección; no puede definir funciones, pero puede tener punteros de función;

C++: tiene comportamiento de protección, el valor predeterminado es privado;

Nota: Son los derechos de acceso. La estructura es totalmente accesible para el mundo exterior y C++ tiene configuraciones de derechos de acceso.

Correcto, sizeof es un operador en tiempo de compilación y es; determinado en el momento de la compilación Puede considerarse como constantes relacionadas con y

Nota: al definir una matriz, la longitud de la matriz debe ser una determinada constante

Parámetros formales: se especifican; al definir los parámetros de la función, no ocupan unidades de almacenamiento en la memoria cuando no se llaman. La memoria solo se asignará cuando se realice la llamada. Una vez completada la llamada, se liberará la unidad de memoria ocupada por los parámetros formales

Parámetros reales: los parámetros pasados ​​cuando se llama a la función

Sobrecarga: el mismo espacio de nombres --- - el mismo nombre de función, diferentes listas de parámetros Nota: entendido como múltiples funciones con el mismo nombre en una clase

Sobrescritura/sobrescritura: diferentes espacios de nombres --- - --Para herencia, la subclase redefine el método de función virtual con el mismo nombre de función y la misma lista de parámetros en la clase principal

Redefinición/ocultación: Redefinir (ocultar) significa que la función de la clase derivada está bloqueado Para funciones de clase base con el mismo nombre, las reglas son las siguientes:

a Si una función de una clase derivada tiene el mismo nombre que una función de una clase base, pero los parámetros son diferentes, en este momento, la función de la clase base está oculta independientemente de si es virtual o no.

b Si la función de la clase derivada tiene el mismo nombre que la función de la clase base, y los parámetros también son los mismos, pero la función de la clase base no tiene la palabra clave visual, entonces la función de la clase base está oculta.

①: Ocultar detalles de implementación para que el código pueda modularizarse; extender el módulo de código para implementar la reescritura de código.

②: Reutilización de interfaz: para usar una clase derivada entre múltiples derivadas. clases El atributo se llama correctamente

Utilice el método sizeof:

Defina un puntero P e imprima sizeof (P). Si el resultado es 4, cómo identificar el sistema operativo como. ¿32 bits? Si el resultado impreso es 2, entonces el identificador es de 16 bits.

La tabla de funciones virtuales se crea durante el período de compilación. Cada función virtual está organizada en una matriz de la dirección de entrada de la función virtual (en resumen, forma una matriz para almacenar la dirección de la función virtual)

El puntero de la tabla de funciones virtuales se establece en tiempo de ejecución, También se inicializa cuando se llama al constructor.

¿Qué son la encapsulación, la herencia y el polimorfismo? ¿Por qué lo usas así? ¿Por qué usarlo?

Encapsulación: abstrae cosas objetivas en clases, y cada clase implementa protección para sus propios datos y métodos. Nota: protege a los miembros internos

Herencia: hay tres formas de implementación de herencia generalizada:

Herencia de implementación: se refiere a la capacidad de usar las propiedades y métodos de la clase base sin codificación adicional.

Herencia visual: el formulario secundario usa la apariencia y el código de implementación del padre; form

Herencia de interfaz: solo use atributos y métodos, y luego impleméntelos en subclases

Los dos primeros y el último constituyen dos métodos de reutilización de funciones

Polimorfismo : Principalmente para abstracción

Siempre que sea una función, se realizará la verificación de tipos.

Esta es la ventaja de las funciones en línea en comparación con las macros.

①: Asignación de área de almacenamiento estático; la memoria se ha asignado durante la compilación y esta memoria existe durante todo el período de ejecución del programa. Por ejemplo, variables globales.

②: Creadas en el área de exposición; al ejecutar una función, las unidades de almacenamiento de las variables locales dentro de la función se pueden crear en la pila y se liberarán automáticamente cuando finalice la ejecución de la función. Alta eficiencia, pero capacidad de memoria limitada.

③: Asignar desde el montón: o llamado: asignación de memoria dinámica. El programador es responsable de cuándo liberar memoria o eliminarla.

La definición de macro con parámetros se usa en lenguaje C y en línea se usa en C++

Vida El período es diferente del período espacial

Las variables locales se crean cuando se llama a la función y se destruyen cuando finaliza. Excepto estática

Las variables locales no tienen enlaces externos, las variables globales

Variables globales: área de datos estática

Variables locales: colocadas en el área de la pila

p>

malloc y free son bibliotecas estándar del lenguaje C++/C, y new y delete son operadores de C++.

Nota: new y eliminar no son funciones de biblioteca;

malloc/free no puede satisfacer que el objeto deba ejecutar automáticamente el constructor cuando se crea, y el destructor debe ejecutarse automáticamente antes del el objeto muere. Son funciones de biblioteca, no operadores, y están fuera del control del compilador.

nuevo y eliminar pueden completar la asignación y liberación de memoria, la inicialización y la limpieza.

Determine si el puntero está vacío. Si está vacío, imprima el registro de errores y regrese para finalizar esta función.

No, se pueden lanzar dos punteros de diferentes tipos.

Aplicación dinámica

No sabes cuánto espacio de almacenamiento requiere un objeto hasta que se ejecuta, y no necesitas saber cómo. largo es el ciclo de vida del objeto.

Versión de depuración, que contiene información de depuración, como la aplicación de aserción, y no realiza ninguna optimización para facilitar a los programadores la depuración del programa. .

La versión se denomina versión de lanzamiento. A menudo realiza varias optimizaciones.

El destructor es una función miembro de clase especial sin tipo de retorno. parámetros, no se puede llamar a voluntad y no hay sobrecarga. Solo puede ser llamado por el propio sistema cuando finaliza el ciclo de vida del objeto de clase. El papel del espacio de memoria lateral dominante.

Las funciones virtuales son una manifestación del polimorfismo de C++. Al usar funciones virtuales, podemos realizar enlaces dinámicos de manera flexible, por supuesto a costa de una cierta sobrecarga.

(Aquí todavía uso funciones virtuales. No entiendo bien la aplicación de La memoria se libera repetidamente, lo que lleva a algunas excepciones inesperadas.

Por ejemplo, la inicialización de variables globales no es causada por la función principal. Por ejemplo:

El constructor del objeto global se ejecutará antes de la función principal.

Polimorfismo, función virtual pura, clase abstracta

Función en línea

Características de las funciones virtuales: Si desea que la clase derivada pueda redefinir los métodos de la clase base. Luego defina el método como un método virtual en la clase base, lo que permite el enlace dinámico.

Características de las funciones en línea: El propósito de utilizar funciones en línea es mejorar el rendimiento de la función. El código de las funciones en línea no puede ser demasiado largo, porque las funciones en línea ahorran el tiempo de llamar a funciones a expensas de la expansión del código. Las funciones en línea no pueden contener declaraciones de bucle. Porque ejecutar una declaración de bucle es más costoso que llamar a una función.

El compilador completa automáticamente la creación de instancias de plantillas de funciones al procesar llamadas a funciones.

La creación de instancias de plantillas de clases debe ser especificada explícitamente por el programador en el programa.

Nombre de función y lista de parámetros

Operadores que no se pueden sobrecargar:

①: Operadores que no pueden cambiar los tipos de datos internos de C++ (como int float, etc.)

②: No se puede sobrecargar ".", porque . es significativo para cualquier miembro de la clase y se ha convertido en un uso estándar.

③: No se pueden sobrecargar símbolos que no están actualmente en el conjunto de operadores de C++, como como: @, etc. Voluntad: primero, es difícil de entender y segundo, la prioridad no se puede determinar

④: La sobrecarga de los operadores existentes no puede cambiar las reglas de prioridad, de lo contrario causará confusión.

Puede ser que la clase derivada no pueda llamar al destructor.

Se puede decir que las plantillas son relativamente antiguas, pero la programación genérica actual es esencialmente programación de plantillas. Encarna un pensamiento universal y generalizado.

STL tiene 7 contenedores:

vector (bocadillos para acceder a los datos almacenados), lista (adición, eliminación, modificación y consulta frecuentes de datos), deque (estructura de cola), mapa, multimap, set (usado para construir datos en forma de pila), multiset.

El contenedor es una clase de propósito especial

El conocimiento de copia superficial copia punteros pero no copia recursos

La copia profunda copia recursos

Los dos operandos detrás de la expresión ternaria "?:" deben ser del mismo tipo. De lo contrario habrá problemas.

En general, el montón es la terminología del lenguaje C y el sistema operativo. Es una memoria asignada dinámicamente mantenida por el sistema operativo que se asigna dinámicamente a través de almacenamiento nuevo y gratuito. eliminar en C++ y el concepto abstracto de liberar un objeto. No son exactamente iguales.

Técnicamente, montón es el término para designar el lenguaje C y el sistema operativo. El montón es una memoria especial mantenida por el sistema operativo. Proporciona la función de asignación dinámica. Cuando el programa en ejecución llama a malloc (), se asignará desde él. La memoria se puede devolver llamando a free más tarde. El almacenamiento libre es un concepto abstracto en C ++ que asigna y libera objetos dinámicamente mediante nuevos y eliminados. El área de memoria solicitada mediante nuevos se puede denominar área de almacenamiento libre. Básicamente, todos los compiladores de C++ utilizan el montón para implementar el almacenamiento libre de forma predeterminada, es decir, los operadores globales predeterminados nuevo y eliminar se pueden implementar como malloc y libre. En este caso, los objetos asignados por el nuevo operador son. También es correcto decir que está en el montón, y también es correcto decir que está en el área de almacenamiento libre.

El proceso de compilación de un programa es el proceso de convertir el código fuente de texto del usuario (c/c++) en código de máquina que puede ser ejecutado directamente por la computadora. Pasa principalmente por cuatro procesos: preprocesamiento, compilación, ensamblaje y vinculación. Los ejemplos específicos son los siguientes.

Un programa en lenguaje C de hello.c es el siguiente.

El proceso de compilación es el siguiente: