Preguntas frecuentes de la entrevista de C++ | conjunto 2

P. Principales diferencias entre Java y C++ 

Hay muchas diferencias, algunas de las principales diferencias son:  

  • Java tiene una recolección de basura automática, mientras que C++ tiene destructores, que se invocan automáticamente cuando se destruye el objeto.
  • Java no admite punteros, plantillas, uniones, sobrecarga de operadores, estructuras, etc.
  • C++ no tiene soporte integrado para subprocesos, mientras que en Java hay una clase de subproceso que hereda para crear un nuevo subproceso
  • Sin ir a Java
  • C++ admite la sobrecarga de métodos y la sobrecarga de operadores, pero Java solo tiene sobrecarga de métodos.
  • C++ admite la herencia múltiple usando solo clases, pero Java no admite la herencia múltiple usando la clase. Necesitamos interfaces para implementar múltiples herencias en Java.
  • Java se interpreta y, por lo tanto, es independiente de la plataforma, mientras que C++ no lo es. En el momento de la compilación, el código fuente de Java se convierte en código de bytes JVM . El intérprete ejecuta este código de bytes en tiempo de ejecución y da salida. C++ se ejecuta y compila utilizando un compilador que convierte el código fuente en un lenguaje de nivel de máquina.

P. ¿Qué son los especificadores de acceso de C++?

Los especificadores de acceso se utilizan para definir cómo se puede acceder a los miembros (funciones y variables) fuera de la clase.  

  • Privado: los miembros declarados como privados solo son accesibles dentro de la misma clase y no se puede acceder a ellos fuera de la clase en la que están declarados. Las clases secundarias tampoco pueden acceder a miembros privados de los padres.
  • Público: los miembros declarados como públicos son accesibles desde cualquier lugar.
  • Protegido: solo la clase y sus clases secundarias pueden acceder a los miembros protegidos.

table5.6

¿Sabe qué sucede cuando se otorga un acceso más restrictivo a un método de clase derivada en C++? 

P. Funciones principales de C++

Clase: La clase es un modelo de datos y funciones o métodos. La clase no ocupa ningún espacio.  

  • Objeto: los objetos son entidades básicas de tiempo de ejecución en un sistema orientado a objetos, los objetos son instancias de una clase, estos son tipos de datos definidos por el usuario.
  • Encapsulación y abstracción de datos: el encapsulamiento (combinación) de datos y funciones en una sola unidad se conoce como encapsulación. Los datos no son accesibles para el mundo exterior y solo aquellas funciones que están envueltas en la clase pueden acceder a ellos. Este aislamiento de los datos del acceso directo por parte del programa se denomina ocultación de datos u ocultación de información.
  • Abstracción de datos : proporcionar solo la información necesaria al mundo exterior y ocultar los detalles de implementación. Por ejemplo, considere una clase Complex con funciones públicas como getReal() y getImag(). Podemos implementar la clase como una array de tamaño 2 o como dos variables. La ventaja de las abstracciones es que podemos cambiar la implementación en cualquier momento, los usuarios de la clase Complex no se verán afectados ya que nuestra interfaz de método sigue siendo la misma. Si nuestra implementación hubiera sido pública, no habríamos podido cambiarla.
  • Herencia: La herencia es el proceso por el cual los objetos de una clase adquieren las propiedades de los objetos de otra clase. Apoya el concepto de clasificación jerárquica. La herencia proporciona reutilización. Esto significa que podemos agregar funciones adicionales a una clase existente sin modificarla.
  • Polimorfismo: Polimorfismo significa capacidad de tomar más de una forma. Una operación puede exhibir diferentes comportamientos en diferentes instancias. El comportamiento depende de los tipos de datos utilizados en la operación.
  • Enlace dinámico: en el enlace dinámico, el código que se ejecutará en respuesta a la llamada de función se decide en tiempo de ejecución. C++ tiene funciones virtuales para soportar esto.
  • Paso de mensajes: los objetos se comunican entre sí mediante el envío y la recepción de información entre ellos. Un mensaje para un objeto es una solicitud de ejecución de un procedimiento y, por lo tanto, invocará una función en el objeto receptor que genera los resultados deseados. El paso de mensajes implica especificar el nombre del objeto, el nombre de la función y la información que se enviará.

P.  Estructura vs clase en C++

  • En C++, una estructura es lo mismo que una clase excepto por las siguientes diferencias: 
    • Los miembros de una clase son privados por defecto y los miembros de una estructura son públicos por defecto.
    • Al derivar una estructura de una clase/estructura, el especificador de acceso predeterminado para una clase/estructura base es público. Y al derivar una clase, el especificador de acceso predeterminado es privado. 

P.  Malloc() frente a nuevo / Eliminar frente a gratuito

Las siguientes son las diferencias entre malloc() y el operador new.  

  • new es un operador, mientras que malloc() es una función.
  • new devuelve el tipo de datos exacto, mientras que malloc() devuelve void *.
  • constructores de llamadas nuevas (las instancias de clase se inicializan y desinicializan automáticamente), mientras que malloc() no lo hace (las clases no se inicializarán ni desinicializarán automáticamente
  • Sintaxis: 
    1. int *n = nuevo int(10); // inicialización con new()
    2. str = (char *) malloc(15); //malloc()

free() se usa en recursos asignados por malloc() o calloc() en C 

La eliminación se usa en los recursos asignados por new en C++  

P.  Funciones en línea

C++ proporciona funciones en línea para reducir la sobrecarga de llamadas a funciones. La función en línea es una función que se expande en línea cuando se llama. Cuando se llama a la función en línea, el código completo de la función en línea se inserta o sustituye en el punto de la llamada a la función en línea. Esta sustitución la realiza el compilador de C++ en tiempo de compilación. La función en línea puede aumentar la eficiencia si es pequeña. 

La sintaxis para definir la función en línea es: 

nombre de función de tipo de retorno en línea (parámetros) 

// Código de función 

Recuerde, insertar es solo una solicitud al compilador, no un comando. El compilador puede ignorar la solicitud de inserción. 

P. Clase Friend y función en C++

Una clase amiga puede acceder a miembros privados y protegidos de otra clase en la que está declarada como amiga. A veces es útil permitir que una clase en particular acceda a miembros privados de otra clase. Por ejemplo, se puede permitir que una clase LinkedList acceda a miembros privados de Node. 

Función de amigo Al igual que la clase de amigo, una función de amigo puede recibir una concesión especial para acceder a miembros privados y protegidos. Una función de amigo puede ser: 

a) Un método de otra clase 

b) Una función global 

Puntos importantes sobre las funciones y clases de amigos: 

1) Los amigos deben usarse solo para un propósito limitado. demasiadas funciones o clases externas se declaran como amigos de una clase con datos protegidos o privados, disminuye el valor de la encapsulación de clases separadas en la programación orientada a objetos. 

2) La amistad no es mutua. Si la clase A es amiga de B, entonces B no se convierte en amiga de A automáticamente. 

3) La amistad no se hereda (Ver esto para más detalles) 

4) El concepto de amigos no existe en Java. 

Q.  Sobrecarga de funciones VS Sobrecarga de operadores

La sobrecarga de funciones es una característica de C++ donde dos o más funciones pueden tener el mismo nombre pero diferente tipo de parámetros y diferente número de parámetros. 

Nota: No se permite la sobrecarga de funciones con diferentes tipos de devolución. 

La sobrecarga operativa nos permite hacer que los operadores trabajen para clases definidas por el usuario. Por ejemplo, podemos sobrecargar un operador ‘+’ en una clase como String para que podamos concatenar dos strings simplemente usando +. 

Otras clases de ejemplo donde los operadores aritméticos pueden sobrecargarse son Número complejo, Número fraccionario, Entero grande, etc. 

Q.  Copiar constructor

Un constructor de copias es una función miembro que inicializa un objeto usando otro objeto de la misma clase. Un constructor de copias tiene el siguiente prototipo de función general: ClassName (const ClassName &old_obj); 

Punto(int x1, int y1) { x = x1; y = y1; } 

// Copiar constructor 

Punto(const Punto &p2) {x = p2.x; y = p2.y; } 

¿Cuándo se llama al constructor de copias? 

En C++, se puede llamar a un constructor de copias en los siguientes casos: 

  1. Cuando un objeto de la clase se devuelve por valor.
  2. Cuando se pasa un objeto de la clase (a una función) por valor como argumento.
  3. Cuando un objeto se construye a partir de otro objeto de la misma clase.
  4. Cuando el compilador genera un objeto temporal.

¿Podemos hacer que el constructor de copias sea privado? 

Sí, un constructor de copias se puede hacer privado. 

P. ¿Qué es la herencia?

Los diferentes tipos de objetos a menudo tienen una cierta cantidad en común entre sí. Sin embargo, cada uno también define características adicionales que los hacen diferentes. La programación orientada a objetos permite que las clases hereden el estado y el comportamiento de uso común de otras clases 

P.  ¿Qué es un miembro estático?

Static es una palabra clave en C++ utilizada para dar características especiales a un elemento. A los elementos estáticos se les asigna almacenamiento solo una vez en la vida útil del programa en el área de almacenamiento estático. Y tienen un alcance hasta la vida útil del programa. La palabra clave estática se puede usar con lo siguiente, 

Datos interesantes sobre funciones de miembros estáticos en C++ 

  • Las funciones miembro estáticas no tienen este puntero.
  • Una función miembro estática no puede ser virtual
  • Las declaraciones de función miembro con el mismo nombre y el nombre lista-tipo-parámetro no se pueden sobrecargar si alguna de ellas es una declaración de función miembro estática.
  • La función miembro estática no se puede declarar const, volatile o const volatile.

Haga clic aquí para leer más datos interesantes de C++ 

Haga clic aquí para practicar las preguntas basadas en «¿Cuál es el resultado?» 

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *