top 70 c interview questions
Preguntas de entrevistas de C ++ básicas y avanzadas más frecuentes con ejemplos de código para candidatos de nivel de entrada y profesionales experimentados:
Este artículo detallado seguramente será un marcador para aquellos que se están preparando para una entrevista en C ++.
Casi todos los temas principales de C ++ se tratan aquí junto con algunas preguntas básicas sobre temas avanzados como la biblioteca de plantillas estándar (STL), etc.
Este conjunto de preguntas de codificación de C ++ lo ayudará a enfrentar cualquier entrevista de C ++ con confianza y despejarla con éxito en el primer intento.
Lo que vas a aprender:
- Preguntas de la entrevista de C ++ con ejemplos de código
Preguntas de la entrevista de C ++ con ejemplos de código
A continuación se enumeran las preguntas de entrevistas de programación en C ++ más populares que son respondidas por un experto en C ++.
Leer también => Principales preguntas de la entrevista sobre programación en C
C ++ básico
Estructura del programa C ++
P # 1) ¿Cuál es la estructura básica de un programa C ++?
Responder: La estructura básica de un programa C ++ se muestra a continuación:
|_+_|La primera línea que comienza con ' # ' es un directiva de preprocesador . En este caso, estamos usando incluir como una directiva que le dice al compilador que incluya un encabezado mientras ' iostream.h ”Que se utilizará para la entrada / salida básica más adelante en el programa.
La siguiente línea es la función 'principal' que devuelve un número entero. La función principal es el punto de partida de ejecución de cualquier programa C ++. Independientemente de su posición en el archivo de código fuente, el compilador de C ++ siempre ejecuta primero el contenido de la función principal.
En la siguiente línea, podemos ver llaves abiertas que indican el inicio de un bloque de código. Después de esto, vemos la instrucción de programación o la línea de código que usa el recuento que es el flujo de salida estándar (su definición está presente en iostream.h).
Este flujo de salida toma una cadena de caracteres y la imprime en un dispositivo de salida estándar. En este caso, es '¡Hola, mundo!'. Tenga en cuenta que cada instrucción de C ++ termina con un punto y coma (;), que es muy necesario y omitirlo resultará en errores de compilación.
Antes de cerrar las llaves}, vemos otra línea 'return 0;'. Este es el punto de retorno a la función principal.
Cada programa C ++ tendrá una estructura básica como se muestra arriba con una directiva de preprocesador, declaración de función principal seguida de un bloque de código y luego un punto de retorno a la función principal que indica la ejecución exitosa del programa.
P # 2) ¿Cuáles son los comentarios en C ++?
Responder: Los comentarios en C ++ son simplemente un fragmento de código fuente ignorado por el compilador. Solo son útiles para que un programador agregue una descripción o información adicional sobre su código fuente.
En C ++ hay dos formas de agregar comentarios:
- // comentario de una sola línea
- / * bloquear comentario * /
El primer tipo descartará todo después de que el compilador encuentre '//'. En el segundo tipo, el compilador descarta todo entre '/ *' y '* /'.
Variables, tipos de datos y constantes
Q # 3) Diferencia entre Declaración y Definición de una variable.
Responder: La declaración de una variable es simplemente especificar el tipo de datos de una variable y el nombre de la variable. Como resultado de la declaración, le decimos al compilador que reserve el espacio para una variable en la memoria de acuerdo con el tipo de datos especificado.
Ejemplo:
|_+_|Todo lo anterior son declaraciones válidas. Además, tenga en cuenta que, como resultado de la declaración, el valor de la variable es indeterminado.
Considerando que, una definición es una implementación / instanciación de la variable declarada donde atamos el valor apropiado a la variable declarada para que el enlazador pueda vincular referencias a las entidades apropiadas.
Ejemplo de arriba ,
Resultado = 10;
C = 'A';
Estas son definiciones válidas.
P # 4) Comente sobre el alcance local y global de una variable.
Responder: El alcance de una variable se define como la extensión del código de programa dentro del cual la variable permanece activa, es decir, se puede declarar, definir o trabajar con ella.
Hay dos tipos de alcance en C ++:
- Alcance local: Se dice que una variable tiene un alcance local o es local cuando se declara dentro de un bloque de código. La variable permanece activa solo dentro del bloque y no es accesible fuera del bloque de código.
- Alcance global: Una variable tiene un alcance global cuando se puede acceder a ella en todo el programa. Se declara una variable global en la parte superior del programa antes de todas las definiciones de función.
Ejemplo:
|_+_|P # 5) ¿Cuál es la precedencia cuando hay una variable global y una variable local en el programa con el mismo nombre?
Responder: Siempre que haya una variable local con el mismo nombre que el de una variable global, el compilador da prioridad a la variable local.
Ejemplo:
|_+_|La salida del código anterior es 5. Esto se debe a que, aunque ambas variables tienen el mismo nombre, el compilador ha dado preferencia al ámbito local.
P # 6) Cuando hay una variable global y una variable local con el mismo nombre, ¿cómo accederá a la variable global?
Responder: Cuando hay dos variables con el mismo nombre pero de alcance diferente, es decir, una es una variable local y la otra es una variable global, el compilador dará preferencia a una variable local.
Para acceder a la variable global, utilizamos un ' operador de resolución de alcance (: :) ”. Usando este operador, podemos acceder al valor de la variable global.
Ejemplo:
|_+_|Producción:
Variable global x = 10
Variable local x = 2
P # 7) ¿De cuántas formas hay de inicializar un int con una constante?
Responder: Hay dos maneras:
- El primer formato usa la notación C tradicional.
int resultado = 10; - El segundo formato usa la notación del constructor.
int resultado (10);
Constantes
P # 8) ¿Qué es una constante? Explique con un ejemplo.
Responder: Una constante es una expresión que tiene un valor fijo. Se pueden dividir en constantes enteras, decimales, de coma flotante, de caracteres o de cadena según su tipo de datos.
Además del decimal, C ++ también admite dos constantes más, es decir, constantes octales (a la base 8) y hexadecimales (a la base 16).
Ejemplos de constantes:
- 75 // entero (decimal)
- 0113 // octal
- 0x4b // hexadecimal
- 3.142 // punto flotante
- 'C' // constante de caracteres
- 'Hola, mundo' // constante de cadena
Nota: Cuando tenemos que representar un solo carácter, usamos comillas simples y cuando queremos definir una constante con más de un carácter, usamos comillas dobles.
P # 9) ¿Cómo define / declara constantes en C ++?
Responder: En C ++, podemos definir nuestras propias constantes usando el #define directiva de preprocesador.
#define Valor identificador
Ejemplo:
|_+_|Producción: Área de un círculo = 78,55
Como se muestra en el ejemplo anterior, una vez que definimos una constante usando la directiva #define, podemos usarla en todo el programa y sustituir su valor.
Podemos declarar constantes en C ++ usando el ' constante ”Palabra clave. Esta forma es similar a la de declarar una variable, pero con un prefijo constante.
Ejemplos de declaración de una constante
const int pi = 3,142;
const char c = 'algo';
código postal const = 411014;
En los ejemplos anteriores, siempre que no se especifica el tipo de una constante, el compilador de C ++ lo predetermina a un tipo entero.
Operadores
P # 10) Comente sobre el operador de asignación en C ++.
Responder: El operador de asignación en C ++ se usa para asignar un valor a otra variable.
a = 5;
Esta línea de código asigna el valor entero 5 a variable a .
La parte a la izquierda del operador = se conoce como lvalor (valor izquierdo) y el derecho como rvalue (valor correcto). L valor siempre debe ser una variable mientras que el lado derecho puede ser una constante, una variable, el resultado de una operación o cualquier combinación de ellas.
La operación de asignación siempre se realiza de derecha a izquierda y nunca a la inversa.
Una propiedad que tiene C ++ sobre los otros lenguajes de programación es que el operador de asignación se puede utilizar como rvalue (o parte de un rvalue ) para otra tarea.
Ejemplo:
a = 2 + (b = 5);
es equivalente a:
b = 5;
a = 2 + b;
Lo que significa, primero asigne 5 a variable b y luego asignar a a, el valor 2 más el resultado de la expresión anterior de b (eso es 5), hojas a con un valor final de 7 .
Por tanto, la siguiente expresión también es válida en C ++:
a = b = c = 5;
asignar 5 a las variables a , b y c .
P # 11) ¿Cuál es la diferencia entre igual a (==) y Operador de asignación (=)?
Responder: En C ++, igual a (==) y operador de asignación (=) son dos operadores completamente diferentes.
Igual a (==) es un operador relacional de igualdad que evalúa dos expresiones para ver si son iguales y devuelve verdadero si son iguales y falso si no lo son.
El operador de asignación (=) se utiliza para asignar un valor a una variable. Por tanto, podemos tener una operación de asignación compleja dentro del operador relacional de igualdad para la evaluación.
P # 12) ¿Cuáles son los distintos operadores aritméticos en C ++?
Respuesta: C ++ admite los siguientes operadores aritméticos:
- + adición
- - resta
- * multiplicación
- / division
- % módulo
Demostremos los distintos operadores aritméticos con el siguiente fragmento de código.
Ejemplo:
|_+_|Producción :
a + b = 8
a - b = 2
a * b = 15
a / b = 2
a% b = 1
Como se muestra arriba, todas las otras operaciones son sencillas e iguales a las operaciones aritméticas reales, excepto el operador de módulo que es bastante diferente. El operador de módulo divide ayby el resultado de la operación es el resto de la división.
P # 13) ¿Cuáles son los distintos operadores de asignación de compuestos en C ++?
Responder: A continuación se muestran los operadores de asignación de compuestos en C ++:
+=, -=, *=, /=, %=, >>=,<<=, &=, ^=,|=
El operador de asignación compuesto es una de las características más importantes del lenguaje C ++ que nos permite cambiar el valor de una variable con uno de los operadores básicos:
Ejemplo:
|_+_|P # 14) Indique la diferencia entre las operaciones de incremento / decremento previo y posterior.
Responder: C ++ permite dos operadores, es decir, ++ (incremento) y - (decremento), que le permiten sumar 1 al valor existente de una variable y restar 1 de la variable respectivamente. Estos operadores se denominan a su vez incremento (++) y decremento (-).
Ejemplo:
a=5;
a++;
La segunda declaración, a ++, hará que se agregue 1 al valor de a. Entonces a ++ es equivalente a
a = a + 1; o
a += 1;
Una característica única de estos operadores es que podemos prefijar o sufijar estos operadores con la variable. Por lo tanto, si a es una variable y anteponemos el operador de incremento, será
++a;
Esto se llama Preincremento. De manera similar, también tenemos pre-decremento.
Si prefijamos la variable a con un operador de incremento, tendremos,
a++;
Este es el incremento posterior. Asimismo, también tenemos post-decremento.
La diferencia entre el significado de pre y post depende de cómo se evalúe la expresión y se almacene el resultado.
En el caso del operador de preincremento / decremento, la operación de incremento / decremento se lleva a cabo primero y luego el resultado se pasa a un valor l. Mientras que para las operaciones posteriores al incremento / decremento, el lvalue se evalúa primero y luego el incremento / decremento se realiza en consecuencia.
Ejemplo:
a = 5; b = 6;
++ a; # a = 6
B-; # b = 6
-a; # a = 5
b++; #6
E / S a través de la consola
P # 15) ¿Cuáles son los operadores de extracción e inserción en C ++? Explique con ejemplos.
Responder: En la biblioteca iostream.h de C ++, porcelana , y costo son los dos flujos de datos que se utilizan para entrada y salida respectivamente. Cout normalmente se dirige a la pantalla y cin se asigna al teclado.
'Cin' (operador de extracción): Al usar el operador sobrecargado >> con cin stream, C ++ maneja la entrada estándar.
|_+_|Como se muestra en el ejemplo anterior, se declara una variable entera 'edad' y luego espera que cin (teclado) ingrese los datos. “Cin” procesa la entrada solo cuando se presiona la tecla RETURN.
'Cout' (operador de inserción): Esto se usa junto con el sobrecargado<< operator. It directs the data that followed it into the cout stream.
Ejemplo:
reproductor de archivos swf sin objeto flash shockwave instalado|_+_|
Control de estructuras y funciones
Estructuras de control y bucles
P # 16) ¿Cuál es la diferencia entre while y do while? Explique con ejemplos.
Responder: El formato del bucle while en C ++ es:
Mientras (expresión)
{declaraciones;}
El bloque de instrucciones bajo while se ejecuta siempre que la condición en la expresión dada sea verdadera.
Ejemplo:
|_+_|En el código anterior, el ciclo saldrá directamente si n es 0. Por lo tanto, en el ciclo while, la condición de terminación está al comienzo del ciclo y si se cumple, no se ejecutan iteraciones del ciclo.
A continuación, consideramos el ciclo do-while.
El formato general de do-while es:
hacer {declaración;} while (condición);
Ejemplo:
|_+_|En el código anterior, podemos ver que la declaración dentro del ciclo se ejecuta al menos una vez cuando la condición del ciclo está al final. Estas son las principales diferencias entre el while y el do-while.
En el caso del ciclo while, podemos salir directamente del ciclo al principio, si no se cumple la condición, mientras que en el ciclo do-while ejecutamos las declaraciones del ciclo al menos una vez.
Funciones
P # 17) ¿Qué quiere decir con tipo de retorno 'nulo'?
Responder: Todas las funciones deben devolver un valor según la sintaxis general.
Sin embargo, en caso de que no deseamos que una función devuelva ningún valor, usamos ' vacío ”Para indicar eso. Esto significa que usamos ' vacío 'Para indicar que la función no tiene valor de retorno o devuelve' vacío ”.
Ejemplo:
|_+_|P # 18) Explique Pasar por valor y Pasar por referencia.
Responder: Al pasar parámetros a la función usando 'Pasar por valor', pasamos una copia de los parámetros a la función.
Por lo tanto, cualquier modificación que se haga a los parámetros en la función llamada no se devuelve a la función que llama. Por lo tanto, las variables en la función de llamada permanecen sin cambios.
Ejemplo:
|_+_|Producción:
x=1
y=3
z = 4
Como se vio anteriormente, aunque los parámetros se cambiaron en la función llamada, sus valores no se reflejaron en la función de llamada, ya que se pasaron por valor.
Sin embargo, si queremos recuperar los valores modificados de la función a la función que llama, entonces usamos la técnica 'Pasar por referencia'.
Para demostrar esto, modificamos el programa anterior de la siguiente manera:
|_+_| Producción:
x=2
y=6
z = 8
Como se muestra arriba, las modificaciones hechas a los parámetros en las funciones llamadas se pasan a la función que llama cuando usamos la técnica “Pasar por referencia”. Esto se debe a que al usar esta técnica no pasamos una copia de los parámetros, sino que en realidad pasamos la referencia de la variable en sí.
P # 19) ¿Cuáles son los parámetros predeterminados? ¿Cómo se evalúan en la función C ++?
Responder: El parámetro predeterminado es un valor que se asigna a cada parámetro al declarar una función.
Este valor se usa si ese parámetro se deja en blanco mientras se llama a la función. Para especificar un valor predeterminado para un parámetro en particular, simplemente asignamos un valor al parámetro en la declaración de función.
Si no se pasa el valor de este parámetro durante la llamada a la función, el compilador usa el valor predeterminado proporcionado. Si se especifica un valor, se pasa a este valor predeterminado y se utiliza el valor pasado.
Ejemplo:
|_+_|Producción:
12
6
Como se muestra en el código anterior, hay dos llamadas para multiplicar la función. En la primera llamada, solo se pasa un parámetro con un valor. En este caso, el segundo parámetro es el valor predeterminado proporcionado. Pero en la segunda llamada, a medida que se pasan los valores de los dos parámetros, se anula el valor predeterminado y se utiliza el valor pasado.
P # 20) ¿Qué es una función en línea en C ++?
Responder: La función en línea es una función que es compilada por el compilador como el punto de llamar a la función y el código se sustituye en ese punto. Esto hace que la compilación sea más rápida. Esta función se define prefijando el prototipo de la función con la palabra clave 'en línea'.
Tales funciones son ventajosas solo cuando el código de la función en línea es pequeño y simple. Aunque una función se define como en línea, es completamente dependiente del compilador evaluarla como en línea o no.
Estructura de datos avanzada
Matrices
P # 21) ¿Por qué las matrices generalmente se procesan con un bucle for?
Responder: Array usa el índice para recorrer cada uno de sus elementos.
Si A es una matriz, se accede a cada uno de sus elementos como A (i). Programáticamente, todo lo que se requiere para que esto funcione es un bloque iterativo con una variable de ciclo i que sirve como un índice (contador) que se incrementa de 0 a A.length-1.
Esto es exactamente lo que hace un bucle y esta es la razón por la que procesamos matrices utilizando bucles for.
Q #22) Indique la diferencia entre eliminar y eliminar ().
Responder: “Eliminar ()” se usa para liberar la memoria asignada a una matriz que se asignó usando new (). 'Eliminar' se utiliza para liberar una parte de la memoria que se asignó con nuevo.
P # 23) ¿Qué está mal con este código?
T * p = nuevo T (10);
eliminar p;
Responder: El código anterior es sintácticamente correcto y se compilará bien.
El único problema es que simplemente eliminará el primer elemento de la matriz. Aunque se elimina toda la matriz, solo se llamará al destructor del primer elemento y se liberará la memoria para el primer elemento.
P # 24) ¿Cuál es el orden en el que se destruyen los objetos de una matriz?
Responder: Los objetos de una matriz se destruyen en el orden inverso de construcción: primero construidos, último destruidos.
En el siguiente ejemplo, el orden de los destructores será a (9), a (8),…, a (1), a (0):
|_+_|Punteros
P # 25) ¿Qué está mal con este código?
T * p = 0;
eliminar p;
Responder: En el código anterior, el puntero es un puntero nulo. Según el estándar C ++ 03, es perfectamente válido llamar a delete en un puntero NULL. El operador de eliminación se encargaría de la verificación NULL internamente.
P # 26) ¿Qué es una variable de referencia en C ++?
Responder: Una variable de referencia es un nombre de alias para la variable existente. Esto significa que tanto el nombre de la variable como la variable de referencia apuntan a la misma ubicación de memoria. Por lo tanto, cada vez que se actualiza la variable, la referencia también se actualiza.
Ejemplo:
|_+_|Aquí, b es la referencia de a.
Clases de almacenamiento
P # 27) ¿Qué es una clase de almacenamiento? Mencione las clases de almacenamiento en C ++.
Responder: La clase de almacenamiento determina la vida o el alcance de símbolos como variables o funciones.
C ++ admite las siguientes clases de almacenamiento:
- Auto
- Estático
- Externo
- Registrarse
- Mudable
P # 28) Explique el especificador de clase de almacenamiento mutable.
Responder: La variable del miembro de un objeto de clase constante no se puede cambiar. Sin embargo, al declarar las variables como 'mutables', podemos cambiar los valores de estas variables.
P # 29) ¿Para qué sirve la palabra clave auto?
Responder: Por defecto, cada variable local de la función es automática, es decir, auto . En la siguiente función, las variables 'i' y 'j' son variables automáticas.
|_+_|NOTA : Una variable global no es una variable automática.
P # 30) ¿Qué es una variable estática?
Responder: Una variable estática es una variable local que conserva su valor a través de las llamadas a la función. Las variables estáticas se declaran utilizando la palabra clave 'static'. Las variables numéricas que son estáticas tienen el valor predeterminado como cero.
La siguiente función imprimirá 1 2 3 si se llama tres veces.
|_+_|Si una variable global es estática, su visibilidad se limita al mismo código fuente.
P # 31) ¿Cuál es el propósito del Especificador de almacenamiento externo?
Responder: El especificador 'externo' se utiliza para resolver el alcance de un símbolo global.
|_+_|En el código anterior, “i” puede ser visible fuera del archivo donde está definido.
P # 32) Explique el Especificador de almacenamiento de registros.
Responder: La variable “Registro” debe usarse siempre que se use la variable. Cuando una variable se declara con un especificador de 'registro', el compilador proporciona un registro de CPU para que su almacenamiento acelere la búsqueda de la variable.
Q # 33) ¿Cuándo usar argumentos de referencia 'const' en una función?
Responder: El uso de argumentos de referencia 'const' en una función es beneficioso de varias maneras:
- “Const” protege de errores de programación que podrían alterar los datos.
- Como resultado de usar 'const', la función es capaz de procesar argumentos reales const y no const, lo que no es posible cuando no se usa 'const'.
- El uso de una referencia constante permitirá que la función genere y use una variable temporal de manera adecuada.
Estructura y tipos de datos definidos por el usuario
P # 34) ¿Qué es una clase?
Responder: La clase es un tipo de datos definido por el usuario en C ++. Puede crearse para resolver un tipo particular de problema. Después de la creación, no se requiere que el usuario conozca los detalles del funcionamiento de una clase.
En general, la clase actúa como un anteproyecto de un proyecto y puede incluir en varios parámetros y funciones o acciones que operan sobre estos parámetros. Estos se denominan miembros de la clase.
Q # 35) Diferencia entre clase y estructura.
Responder:
Estructura: En lenguaje C, la estructura se usa para agrupar diferentes tipos de tipos de datos. Las variables dentro de una estructura se denominan miembros de la estructura. Estos miembros son públicos por defecto y se puede acceder a ellos utilizando el nombre de la estructura seguido de un operador de punto y luego el nombre del miembro.
Clase: Class es un sucesor de la Estructura. C ++ amplía la definición de estructura para incluir las funciones que operan en sus miembros. Por defecto, todos los miembros dentro de la clase son privados.
Programación orientada a objetos con C ++
Clases, constructores, destructores
P # 36) ¿Qué es el espacio de nombres?
Responder: El espacio de nombres nos permite agrupar un conjunto de clases, objetos y / o funciones globales bajo un nombre específico.
La forma general de usar espacios de nombres es:
mejor anti spyware gratuito para pc
identificador de espacio de nombres {cuerpo-espacio de nombres}
Donde identificador es cualquier identificador válido y el cuerpo del espacio de nombres es el conjunto de clases, objetos y funciones que se incluyen dentro del espacio de nombres. Los espacios de nombres son especialmente útiles en el caso de que exista la posibilidad de que más de un objeto tenga el mismo nombre, lo que da lugar a conflictos de nombres.
P # 37) ¿Cuál es el uso de la declaración 'using'?
Responder: El uso de Declaración se usa para hacer referencia a un nombre del espacio de nombres sin el operador de resolución de alcance.
P # 38) ¿Qué es la manipulación de nombres?
Responder: El compilador de C ++ codifica los tipos de parámetros con función / método en un nombre único. Este proceso se llama alteración de nombres. El proceso inverso se denomina demandante.
Ejemplo:
A :: b (int, largo) const está destrozado como 'B__C3Ail' .
Para un constructor, el nombre del método se omite.
Eso es A :: A (int, largo) const está destrozado como 'C3Ail'.
P # 39) ¿Cuál es la diferencia entre un objeto y una clase?
Responder: La clase es un plano de un proyecto o problema a resolver y consta de variables y métodos. Estos se denominan miembros de la clase. No podemos acceder a métodos o variables de la clase por sí mismos a menos que se declaren estáticos.
Para acceder a los miembros de la clase y ponerlos en uso, debemos crear una instancia de una clase que se llama Objeto. La clase tiene una vida útil ilimitada, mientras que un objeto solo tiene una vida útil limitada.
P # 40) ¿Cuáles son los distintos especificadores de acceso en C ++?
Responder: C ++ admite los siguientes especificadores de acceso:
- Público: Los miembros de datos y las funciones son accesibles fuera de la clase.
- Privado: Los miembros de datos y las funciones no son accesibles fuera de la clase. La excepción es el uso de una clase de amigos.
- Protegido: Los miembros de datos y las funciones son accesibles solo para las clases derivadas.
Ejemplo:
Describe PRIVADO, PROTEGIDO y PÚBLICO junto con sus diferencias y da ejemplos.
|_+_|P # 41) ¿Qué es un constructor y cómo se llama?
Responder: Constructor es una función miembro de la clase que tiene el mismo nombre que la clase. Se utiliza principalmente para inicializar los miembros de la clase. Por defecto, los constructores son públicos.
Hay dos formas de llamar a los constructores:
- Implícitamente: El compilador llama implícitamente a los constructores cuando se crea un objeto de la clase. Esto crea un objeto en una pila.
- Llamada explícita: Cuando el objeto de una clase se crea usando new, los constructores se llaman explícitamente. Esto generalmente crea un objeto en un montón.
Ejemplo:
|_+_|P # 42) ¿Qué es un CONSTRUCTOR DE COPIA y cuándo se llama?
Responder: Un constructor de copia es un constructor que acepta un objeto de la misma clase como parámetro y copia sus miembros de datos al objeto en la parte izquierda de la asignación. Es útil cuando necesitamos construir un nuevo objeto de la misma clase.
Ejemplo:
|_+_|P # 43) ¿Qué es un constructor predeterminado?
Responder: El constructor predeterminado es un constructor que no tiene argumentos o, si los hay, todos son argumentos predeterminados.
Ejemplo:
|_+_|P # 44) ¿Qué es un constructor de conversión?
Responder: Es un constructor que acepta un argumento de un tipo diferente. Los constructores de conversión se utilizan principalmente para convertir de un tipo a otro.
P # 45) ¿Qué es un constructor explícito?
Responder: Un constructor de conversión se declara con la palabra clave explícita. El compilador no usa un constructor explícito para implementar una conversión implícita de tipos. Su finalidad está reservada explícitamente a la construcción.
P # 46) ¿Cuál es el rol de la palabra clave Static para una variable miembro de clase?
Responder: La variable miembro estática comparte una memoria común entre todos los objetos creados para la clase respectiva. No necesitamos referirnos a la variable miembro estática usando un objeto. Sin embargo, se puede acceder utilizando el nombre de la clase en sí.
Q # 47) Explique la función de miembro estático.
Responder: Una función miembro estática solo puede acceder a la variable miembro estática de la clase. Al igual que las variables miembro estáticas, también se puede acceder a una función miembro estática utilizando el nombre de la clase.
P # 48) ¿Cuál es el orden en el que se destruyen los objetos locales?
Respuesta: Considere seguir un fragmento de código:
|_+_|En la función principal, tenemos dos objetos creados uno tras otro. Se crean en orden, primero a luego b. Pero cuando estos objetos se eliminan o si salen del ámbito, el destructor de cada uno se llamará en el orden inverso al que fueron construidos.
Por lo tanto, se llamará primero al destructor de b seguido de a. Incluso si tenemos una matriz de objetos, se destruirán de la misma manera en el orden inverso de su creación.
Sobrecarga
Q # 49) Explique la sobrecarga de funciones y la sobrecarga del operador.
Responder: C ++ soporta el concepto de POO Polimorfismo que significa “muchas formas”.
En C ++ tenemos dos tipos de polimorfismo, es decir, polimorfismo en tiempo de compilación y polimorfismo en tiempo de ejecución. El polimorfismo en tiempo de compilación se logra mediante una técnica de sobrecarga. Sobrecargar simplemente significa dar un significado adicional a una entidad manteniendo intacto su significado básico.
C ++ admite dos tipos de sobrecarga:
Sobrecarga de funciones:
La sobrecarga de funciones es una técnica que permite al programador tener más de una función con el mismo nombre pero con una lista de parámetros diferente. En otras palabras, sobrecargamos la función con diferentes argumentos, es decir, ya sea el tipo de argumentos, el número de argumentos o el orden de los argumentos.
La sobrecarga de funciones nunca se logra en su tipo de retorno.
Sobrecarga del operador:
Este es otro tipo de polimorfismo en tiempo de compilación compatible con C ++. En la sobrecarga del operador, un operador está sobrecargado, de modo que puede operar en los tipos definidos por el usuario así como con los operandos del tipo de datos estándar. Pero al hacer esto, la definición estándar de ese operador se mantiene intacta.
Por ejemplo, un operador de suma (+) que opera con tipos de datos numéricos puede sobrecargarse para operar en dos objetos como un objeto de clase de número complejo.
P # 50) ¿Cuál es la diferencia entre la sobrecarga de métodos y la anulación de métodos en C ++?
Responder: La sobrecarga de métodos tiene funciones con el mismo nombre pero diferentes listas de argumentos. Esta es una forma de polimorfismo en tiempo de compilación.
La anulación de métodos entra en escena cuando reescribimos el método que se deriva de una clase base. La invalidación de métodos se utiliza al tratar con polimorfismo en tiempo de ejecución o funciones virtuales.
P # 51) ¿Cuál es la diferencia entre un constructor de copias y un sobrecargado? Operador de asignación?
Responder: Un constructor de copias y un operador de asignación sobrecargado básicamente tienen el mismo propósito, es decir, asignar el contenido de un objeto a otro. Pero aún así, hay una diferencia entre los dos.
Ejemplo:
|_+_|En el ejemplo anterior, la segunda declaración c1 = c2 es una declaración de asignación sobrecargada.
Aquí, tanto c1 como c2 ya son objetos existentes y el contenido de c2 se asigna al objeto c1. Por lo tanto, para la declaración de asignación sobrecargada, ambos objetos deben crearse ya.
La siguiente declaración, compleja c3 = c2 es un ejemplo del constructor de copia. Aquí, el contenido de c2 se asigna a un nuevo objeto c3, lo que significa que el constructor de copia crea un nuevo objeto cada vez que se ejecuta.
P # 52) Nombre los operadores que no se pueden sobrecargar.
Responder:
- sizeof - operador sizeof
- . - Operador de puntos
- . * - operador de desreferenciación
- -> - operador de desreferenciación de miembros
- :: - operador de resolución de alcance
- ?: - operador condicional
Q # 53) La función se puede sobrecargar en función del parámetro que es un valor o una referencia. Explique si la afirmación es verdadera.
Responder: Falso. Tanto Pasar por valor como Pasar por referencia parecen idénticos a la persona que llama.
P # 54) ¿Cuáles son los beneficios de la sobrecarga del operador?
Responder: Al sobrecargar los operadores estándar en una clase, podemos ampliar el significado de estos operadores, de modo que también puedan operar en otros objetos definidos por el usuario.
La sobrecarga de funciones nos permite reducir la complejidad del código y hacerlo más claro y legible, ya que podemos tener los mismos nombres de función con diferentes listas de argumentos.
Herencia
Q # 55) ¿Qué es la herencia?
Responder: La herencia es un proceso mediante el cual podemos adquirir las características de una entidad existente y formar una nueva entidad agregándole más características.
En términos de C ++, la herencia es la creación de una nueva clase derivándola de una clase existente para que esta nueva clase tenga las propiedades de su clase principal y las suyas propias.
P # 56) ¿Cuáles son las ventajas de la herencia?
Responder: La herencia permite la reutilización del código, lo que ahorra tiempo en el desarrollo del código.
Al heredar, hacemos uso de un software de alta calidad sin errores que reduce problemas futuros.
Q # 57) ¿C ++ admite herencias multinivel y múltiples?
Responder: Si.
P # 58) ¿Qué son las herencias múltiples (herencia virtual)? ¿Cuáles son sus ventajas y desventajas?
Responder: En las herencias múltiples, tenemos más de una clase base de la que puede heredar una clase derivada. Por lo tanto, una clase derivada toma las características y propiedades de más de una clase base.
Por ejemplo , una clase conductor tendrá dos clases base, a saber, empleado y una persona porque un conductor es tanto un empleado como una persona. Esto es ventajoso porque la clase de conductor puede heredar las propiedades del empleado así como la clase de persona.
Pero en el caso de un empleado y una persona, la clase tendrá algunas propiedades en común. Sin embargo, surgirá una situación ambigua ya que la clase de controlador no conocerá las clases de las que se deben heredar las propiedades comunes. Ésta es la principal desventaja de las herencias múltiples.
P # 59) Explique las relaciones de clase de ISA y HASA. ¿Cómo implementarías ¿cada?
Responder: La relación 'ISA' generalmente exhibe herencia, ya que implica que una clase 'ISA' es una versión especializada de otra clase. Por ejemplo , Un empleado de la ISA. Eso significa que una clase de empleado se hereda de la clase de persona.
Al contrario de 'ISA', la relación 'HASA' describe que una entidad puede tener otra entidad como miembro o una clase tiene otro objeto incrustado en su interior.
Entonces, tomando el mismo ejemplo de una clase de Empleado, la forma en que asociamos la clase Salario con el empleado no es heredando, sino incluyendo o conteniendo el objeto Salario dentro de la clase Empleado. La relación “HASA” se muestra mejor mediante contención o agregación.
P # 60) ¿Una clase derivada hereda o no hereda?
Responder: Cuando una clase derivada se construye a partir de una clase base en particular, básicamente hereda todas las características y miembros ordinarios de la clase base. Pero hay algunas excepciones a esta regla. Por ejemplo, una clase derivada no hereda los constructores y destructores de la clase base.
Cada clase tiene sus propios constructores y destructores. La clase derivada tampoco hereda el operador de asignación de la clase base y los amigos de la clase. La razón es que estas entidades son específicas de una clase en particular y si se deriva otra clase o si es amiga de esa clase, entonces no pueden pasarse a ellas.
Polimorfismo
P # 61) ¿Qué es el polimorfismo?
Responder: La idea básica detrás del polimorfismo tiene muchas formas. En C ++, tenemos dos tipos de polimorfismo:
(i) Polimorfismo en tiempo de compilación
En el polimorfismo en tiempo de compilación, logramos muchas formas mediante la sobrecarga. Por lo tanto, tenemos una sobrecarga de Operador y una sobrecarga de funciones. (Ya hemos cubierto esto arriba)
(ii) Polimorfismo en tiempo de ejecución
Este es el polimorfismo de clases y objetos. La idea general es que una clase base puede ser heredada por varias clases. Un puntero de clase base puede apuntar a su clase secundaria y una matriz de clase base puede almacenar diferentes objetos de clase secundaria.
Esto significa que un objeto reacciona de manera diferente a la misma llamada de función. Este tipo de polimorfismo puede utilizar un mecanismo de función virtual.
P # 62) ¿Qué son las funciones virtuales?
Responder: Una función virtual permite que las clases derivadas reemplacen la implementación proporcionada por la clase base.
Siempre que tengamos funciones con el mismo nombre en la clase base y en la derivada, surge una ambigüedad cuando intentamos acceder al objeto de la clase secundaria usando un puntero de clase base. Como usamos un puntero de clase base, la función que se llama es la función de clase base con el mismo nombre.
Para corregir esta ambigüedad usamos la palabra clave “virtual” antes del prototipo de función en la clase base. En otras palabras, hacemos que esta función polimórfica sea Virtual. Al usar una función virtual, podemos eliminar la ambigüedad y podemos acceder a todas las funciones de la clase secundaria correctamente usando un puntero de clase base.
P # 63) Dé un ejemplo de polimorfismo en tiempo de ejecución / funciones virtuales.
Responder:
|_+_|En el código anterior, la clase SHAPE tiene una función virtual pura y es una clase abstracta (no se puede instanciar). Cada clase se deriva de SHAPE implementando la función Draw () a su manera.
Además, cada función Draw es virtual de modo que cuando usamos un puntero de clase base (SHAPE) cada vez con el objeto de las clases derivadas (Circle y SQUARE), se llaman las funciones Draw apropiadas.
Q # 64) ¿Qué quiere decir con funciones virtuales puras?
Responder: Una función miembro virtual pura es una función miembro en la que la clase base obliga a las clases derivadas a anular. Normalmente, esta función miembro no tiene implementación. Las funciones virtuales puras se equiparan a cero.
Ejemplo:
|_+_|La clase base que tiene una función virtual pura como miembro puede denominarse 'clase abstracta'. No se puede crear una instancia de esta clase y, por lo general, actúa como un modelo que tiene varias subclases con mayor implementación.
P # 65) ¿Qué son los constructores / destructores virtuales?
Responder:
Destructores virtuales: Cuando usamos un puntero de clase base que apunta a un objeto de clase derivada y lo usamos para destruirlo, en lugar de llamar al destructor de clase derivada, se llama al destructor de clase base.
Ejemplo:
|_+_|Como se muestra en el ejemplo anterior, cuando decimos eliminar a, se llama al destructor, pero en realidad es el destructor de la clase base. Esto da lugar a la ambigüedad de que toda la memoria contenida en b no se borrará correctamente.
Este problema se puede resolver utilizando el concepto de “Destructor virtual”.
Lo que hacemos es hacer que el constructor de la clase base sea “Virtual” para que todos los destructores de la clase secundaria también se vuelvan virtuales y cuando eliminamos el objeto de la clase base que apunta al objeto de la clase derivada, se llama al destructor apropiado y todos los objetos se eliminan correctamente.
Esto se muestra como sigue:
herramientas de prueba de estrés para aplicaciones web|_+_|
Virtual constructor : Los constructores no pueden ser virtuales. Declarar un constructor como función virtual es un error de sintaxis.
Amigo
P # 66) ¿Qué es una función de amigo?
Responder: La clase C ++ no permite que se acceda a sus miembros privados y protegidos fuera de la clase. Pero esta regla puede violarse haciendo uso de la ' Amigo ”Función.
Como sugiere el propio nombre, la función de amigo es una función externa que es amiga de la clase. Para que la función amigo acceda a los métodos privados y protegidos de la clase, deberíamos tener un prototipo de la función amigo con la palabra clave 'amigo' incluida dentro de la clase.
P # 67) ¿Qué es una clase de amigos?
Responder: Las clases de amigos se utilizan cuando necesitamos anular la regla para especificadores de acceso privado y protegido para que dos clases puedan trabajar en estrecha colaboración entre sí.
Por lo tanto, podemos tener una clase de amigos para ser amigos de otra clase. De esta manera, las clases de amigos pueden mantener las cosas privadas e inaccesibles tal como están.
Cuando tenemos el requisito de acceder a la implementación interna de una clase (miembro privado) sin exponer los detalles haciendo público, optamos por funciones de amigos.
C ++ avanzado
Plantillas
P # 68) ¿Qué es una plantilla?
Responder: Las plantillas permiten crear funciones que son independientes del tipo de datos (genérico) y pueden tomar cualquier tipo de datos como parámetros y devolver valor sin tener que sobrecargar la función con todos los tipos de datos posibles. Las plantillas casi cumplen la funcionalidad de una macro.
Su prototipo es cualquiera de los siguientes:
plantilla
plantilla
La única diferencia entre ambos prototipos es el uso de la palabra clave class o typename. Su funcionalidad básica de ser genérico sigue siendo la misma.
Manejo de excepciones
P # 69) ¿Qué es el manejo de excepciones? ¿C ++ admite el manejo de excepciones?
Responder: Sí, C ++ admite el manejo de excepciones.
No podemos garantizar que el código se ejecute normalmente en todo momento. Puede haber ciertas situaciones que podrían obligar a que el código escrito por nosotros no funcione correctamente, aunque esté libre de errores. Este mal funcionamiento del código se llama Excepción .
Cuando ha ocurrido una excepción, el compilador debe lanzarla para que sepamos que ha ocurrido una excepción. Cuando se lanza una excepción, el compilador debe asegurarse de que se maneja correctamente, de modo que el flujo del programa continúe o finalice correctamente. Esto se llama manejo de una excepción.
Por lo tanto, en C ++, tenemos tres palabras clave, es decir tratar , lanzar y captura que están en manejo de excepciones.
La sintaxis general del bloque de excepciones es:
|_+_|Como se muestra arriba, el código que podría funcionar mal se coloca bajo el bloque try. Cuando el código funciona mal, se lanza una excepción. Esta excepción se captura debajo del bloque de captura y se maneja, es decir, se toman las medidas adecuadas.
Q # 70) ¿Comenta sobre las excepciones estándar de C ++?
Responder: C ++ admite algunas excepciones estándar que pueden detectarse si colocamos el código dentro del bloque try. Estas excepciones son parte de la clase base ' std :: excepción ”. Esta clase se define en el archivo de encabezado de C ++.
Algunos ejemplos de excepciones admitidas por esta clase incluyen:
bad_alloc - lanzado por 'nuevo'
runtime_error - lanzado por errores de tiempo de ejecución
bad_typeid - lanzado por id de tipo
Introducción a la biblioteca de plantillas estándar
P # 71) ¿Qué es una biblioteca de plantillas estándar (STL)? ¿Cuáles son los distintos tipos de contenedores STL?
Responder: Una biblioteca de plantillas estándar (STL) es una biblioteca de plantillas contenedoras aprobadas por el comité ANSI para su inclusión en la especificación estándar de C ++. Disponemos de varios tipos de contenedores STL en función de cómo almacenan los elementos.
- Cola, pila - Son los mismos que la cola y la pila tradicionales y se denominan contenedores adaptativos.
- Establecer, Mapa - Estos son básicamente contenedores que tienen pares clave / valor y son de naturaleza asociativa.
- Vector y - Son de naturaleza secuencial y tienen similitudes con las matrices.
P # 72) ¿Qué es una clase Iterator?
Responder: En C ++, una clase contenedora es una colección de diferentes objetos.
Si necesitamos recorrer esta colección de objetos, no podemos hacerlo usando variables de índice simples. Por lo tanto, tenemos una clase especial en STL llamada Iterador class que se puede utilizar para recorrer el contenido de la clase contenedora.
Las diversas categorías de iteradores incluyen iteradores de entrada, iteradores de salida, iteradores de avance, iteradores bidireccionales, acceso aleatorio, etc.
P # 73) ¿Cuál es la diferencia entre un iterador externo y un iterador interno? Describe una ventaja del iterador externo.
Responder: Se implementa un iterador interno con funciones miembro de la clase que tiene elementos para recorrer.
Un iterador externo se implementa como una clase separada que se puede vincular al objeto que tiene elementos para recorrer. La ventaja básica de un iterador externo es que es fácil de implementar, ya que se implementa como una clase separada.
En segundo lugar, como es una clase diferente, muchos objetos iteradores pueden estar activos simultáneamente.
Más lecturas => Preguntas de la entrevista de C #
Conclusión
Casi todos los temas principales de codificación y programación de la entrevista en C ++ se tratan en este artículo.
Esperamos que cualquier candidato se sienta relajado después de prepararse para una entrevista utilizando esta serie de preguntas para entrevistas.
¡¡Todo lo mejor para tu entrevista !!
Lectura recomendada
- Preguntas y respuestas de la entrevista
- Preguntas y respuestas de la entrevista de prueba ETL
- Algunas preguntas y respuestas complicadas sobre pruebas manuales
- Las 25 mejores preguntas y respuestas de la entrevista de pruebas ágiles
- Preguntas de la entrevista de Spock con respuestas (las más populares)
- Algunas preguntas interesantes de la entrevista sobre pruebas de software
- Más de 20 preguntas y respuestas de entrevistas .NET
- Las 32 mejores preguntas y respuestas de la entrevista de Datastage