logo

Domande e risposte all'intervista C++ (2024)

C++ – il linguaggio di programmazione più conosciuto e preferito di tutti i tempi dai programmatori. È ancora attuale come lo era a metà degli anni '80. Essendo un linguaggio di programmazione generico e orientato agli oggetti, viene ampiamente utilizzato soprattutto durante la codifica. Di conseguenza, alcuni ruoli lavorativi richiedono che le persone parlino fluentemente C++. È utilizzato dalle migliori aziende IT come Evernote, LinkedIn, Microsoft, Opera, NASA , E Meta a causa della sua affidabilità, prestazioni e ampia gamma di impostazioni in cui può essere utilizzato. Quindi, per entrare in queste aziende, devi essere approfondito in queste le 50 migliori domande dell'intervista in C++ che può farti sembrare un esperto di fronte ai reclutatori.

Le 50 migliori domande per interviste in C++ per matricole ed esperti (2022)

Per prepararti al colloquio, abbiamo portato il Le 50 principali domande per un'intervista in C++ principiante, intermedio ed esperto che devi assolutamente affrontare per poterti posizionare tra le migliori multinazionali.

Domande di intervista in C++ per le matricole

1. Cos'è il C++? Quali sono i vantaggi del C++?

Il C++ è un linguaggio di programmazione orientato agli oggetti introdotto per superare le giurisdizioni in cui il C era carente. Per orientato agli oggetti intendiamo che funziona con il concetto di polimorfismo , eredità , astrazione , incapsulamento , oggetto e classe .



Vantaggi del C++ :

  1. C++ è un linguaggio OOP, il che significa che i dati sono considerati oggetti.
  2. Il C++ è un linguaggio multiparadigma; In termini semplici, significa che possiamo programmare la logica, la struttura e la procedura del programma.
  3. La gestione della memoria è una funzionalità chiave in C++ poiché consente l'allocazione dinamica della memoria
  4. È un linguaggio di programmazione di medio livello, il che significa che può sviluppare giochi, applicazioni desktop, driver e kernel

Per saperne di più fare riferimento all’articolo – Quali sono i vantaggi del C++?

2. Quali sono i diversi tipi di dati presenti in C++?

tipi di dati in C++

Diversi tipi di tipi di dati in C++

Per ulteriori informazioni, fare riferimento a ' standard' è noto anche come Standard o può essere interpretato come uno spazio dei nomi. Il comando utilizzando lo spazio dei nomi std informa il compilatore di aggiungere tutto sotto il file spazio dei nomi standard e inculcarli nel spazio dei nomi globale . Tutta questa inculcazione dello spazio dei nomi globale ci avvantaggia da usare cout E mangiare senza usare std::_operatore_.

Per ulteriori informazioni, fare riferimento a spazio dei nomi e std .

4. Cosa sono i riferimenti in C++?

Quando una variabile viene descritta come riferimento diventa un alias della variabile già esistente. In termini semplici, una variabile di riferimento è un'altra variabile denominata di una variabile esistente tenendo presente che le modifiche apportate alla variabile di riferimento si rifletteranno nella variabile già esistente. Una variabile di riferimento è preceduta da a '&' simbolo.

Sintassi:

int GFG = 10;  // reference variable int& ref = GFG;>

Per ulteriori informazioni, fare riferimento a riferimenti in C++

5. Cosa intendi per Call by Value e Call by Reference?

In questo linguaggio di programmazione per chiamare una funzione abbiamo 2 metodi: Chiama per valore E Chiama per riferimento

Chiama per valore

Chiama per riferimento

Viene passata una copia di una variabile.Fondamentalmente viene passata una variabile stessa.
Chiamare una funzione inviando i valori copiando le variabili.Chiamare una funzione inviando l'indirizzo della variabile passata.
Le modifiche apportate nella funzione non si riflettono mai all'esterno della funzione sulla variabile. In breve, il valore originale non viene mai alterato in Call by Value.Le modifiche apportate alle funzioni possono essere visualizzate all'esterno della funzione sulla funzione passata. In breve, il valore originale viene alterato in Call by reference.
I parametri effettivi e formali passati vengono archiviati in diverse posizioni di memoria. Pertanto, rendendo Call by Value una piccola memoria insufficienteI parametri effettivi e formali passati vengono archiviati nella stessa posizione di memoria. Pertanto, rendendo Call by Reference un po' più efficiente in termini di memoria.

Per informazioni fare riferimento a la differenza tra chiamata per valore e chiamata per riferimento

6. Definire il token in C++

Un token è il più piccolo elemento individuale di un programma che viene compreso da un compilatore. Un token comprende quanto segue:

  1. Parole chiave – Che contengono un significato speciale per il compilatore
  2. Identificatori – Che possiedono un valore/identità unica
  3. Costanti – Che non cambiano mai il loro valore durante tutto il programma
  4. stringhe – Che contiene la sequenza omogenea dei dati
  5. Simboli speciali – Hanno un significato speciale e non possono essere utilizzati per altri scopi; per esempio: [] () {}, ; * = #
  6. Operatori – Chi esegue operazioni sull'operando

Per ulteriori informazioni, fare riferimento a Token in C++

7. Qual è la differenza tra C e C++?

C

C++

È un linguaggio di programmazione procedurale. In parole semplici, non supporta classi e oggettiÈ una miscela di linguaggi di programmazione sia procedurali che orientati agli oggetti. In parole semplici, supporta classi e oggetti.
Non supporta alcun concetto OOP come polimorfismo, astrazione dei dati, incapsulamento, classi e oggetti.Supporta tutti i concetti di dati
Non supporta il sovraccarico di funzioni e operatoriSupporta rispettivamente il sovraccarico delle funzioni e degli operatori
È un linguaggio guidato dalle funzioniÈ un linguaggio basato sugli oggetti

Per ulteriori informazioni, fare riferimento a Differenza tra C e C++

8. Qual è la differenza tra struttura e classe?

Struttura

Classe

Per impostazione predefinita, i membri della struttura sono sempre in modalità pubblicaI membri della classe possono essere in modalità privata, protetta e pubblica.
Le strutture sono del tipo valore. Hanno valore solo nella memoria.Le classi sono di tipo riferimento. Contiene un riferimento di un oggetto in memoria.
La memoria nelle strutture viene archiviata come stackLa memoria nelle classi viene archiviata come heap.

Per ulteriori informazioni, fare riferimento a Differenza tra struttura e classe.

9. Qual è la differenza tra riferimento e puntatore?

Riferimento

lista di array

Puntatore

Il valore di un riferimento non può essere riassegnatoIl valore di un puntatore può essere riassegnato
Non potrà mai contenere a nullo value poiché ha bisogno di un valore esistente di cui diventare un aliasPuò contenere o puntare a nullo valore ed essere definito come a nullptr O puntatore nullo
Non può funzionare con gli arrayPuò funzionare con gli array
Per accedere ai membri della classe/struttura utilizza un ' . 'Per accedere ai membri della classe/struttura utilizza un ' -> '
È possibile accedere facilmente alla posizione di memoria di riferimento oppure utilizzarla direttamenteNon è possibile accedere facilmente alla posizione di memoria di un puntatore poiché dobbiamo utilizzare un dereferenziamento ' * '

Per ulteriori informazioni, fare riferimento a Differenza tra riferimento e puntatore

10. Qual è la differenza tra sovraccarico delle funzioni e sovraccarico degli operatori?

Sovraccarico di funzioni

Sovraccarico degli operatori

Fondamentalmente si tratta di definire una funzione in numerosi modi in modo tale che ci siano molti modi per chiamarla o in termini semplici si hanno più versioni della stessa funzioneSi tratta sostanzialmente di esercitarsi a dare un significato speciale al significato esistente di un operatore o in termini semplici ridefinire il significato pre-ridefinito
Le funzioni parametrizzate sono un buon esempio di sovraccarico di funzioni poiché semplicemente modificando l'argomento o il parametro di una funzione lo rendi utile per scopi diversiIl polimorfismo è un buon esempio di sovraccarico di operatori poiché un oggetto di classe di allocazione può essere utilizzato e chiamato da classi diverse per scopi diversi

Esempio di sovraccarico delle funzioni:

  1. int GFG(int X, int Y);
  2. int GFG(carattere X, carattere Y);

Esempio di sovraccarico dell'operatore:

  1. int GFG() = X() + Y();
  2. int GFG() = X() – Y();

Per ulteriori informazioni, fare riferimento a Sovraccarico degli operatori E Sovraccarico di funzioni

11. Qual è la differenza tra un array e una lista?

Array

Elenchi

Gli array sono posizioni di memoria contigue di tipi di dati omogenei archiviati in una posizione o dimensione fissa.Le liste sono classici elementi singoli che vengono collegati o collegati tra loro con l'aiuto di puntatori e non hanno una dimensione fissa.
Gli array sono di natura statica.Gli elenchi sono di natura dinamica
Utilizza meno memoria degli elenchi collegati.Utilizza più memoria poiché deve memorizzare il valore e la posizione di memoria del puntatore

Per ulteriori informazioni, fare riferimento a Array contro elenco

12. Qual è la differenza tra un ciclo while e un ciclo do- while?

Mentre Ciclo

fai-mentre Loop

Il ciclo While è anche definito ciclo con ingresso controllatoIl ciclo do- while è definito ciclo di controllo di uscita
Se la condizione non è soddisfatta le istruzioni all'interno del ciclo non verranno eseguiteAnche se la condizione non è soddisfatta, le istruzioni all'interno del ciclo verranno eseguite almeno una volta

Esempio di un ciclo while:

mentre (condizione)

{istruzioni da eseguire;};

Esempio di un ciclo do- while:

Fare {

dichiarazioni da eseguire;

} while(condizione o espressione);

Per ulteriori informazioni, fare riferimento a Differenza tra ciclo while e ciclo do- while

13. Discutere la differenza tra prefisso e postfisso?

prefisso

suffisso

Significa semplicemente mettere l'operatore prima dell'operandoSignifica semplicemente mettere l'operatore dopo l'operando
Si esegue da solo prima '; ' Si esegue da solo dopo '; '
L'associatività del prefisso ++ va da destra a sinistraL'associatività del suffisso ++ è da sinistra a destra

Per ulteriori informazioni, fare riferimento a Differenza tra prefisso e postfisso

14. Qual è la differenza tra new e malloc()?

nuovo

malloc()

new è un operatore che esegue un'operazionemalloc è una funzione che restituisce e accetta valori
new chiama i costruttorimalloc non può chiamare un costruttore
new è più veloce di malloc poiché è un operatoremalloc è più lento di new in quanto è una funzione
new restituisce il tipo di dati esattomalloc restituisce void*

Per ulteriori informazioni, fare riferimento a Differenza tra new e malloc()

15. Qual è la differenza tra funzioni virtuali e funzioni virtuali pure?

Funzione virtuale

Pura funzione virtuale

Una funzione virtuale è una funzione membro di una classe base che può essere ridefinita in un'altra classe derivata.Una funzione virtuale pura è una funzione membro di una classe base dichiarata solo in una classe base e definita in una classe derivata per evitare che diventi una classe astratta.
Una funzione virtuale ha la sua definizione nella rispettiva classe base.Non esiste una definizione in Pure Virtual Function ed è inizializzata con uno specificatore puro (= 0).
La classe base ha una funzione virtuale che può essere rappresentata o istanziata; In parole semplici, il suo oggetto può essere realizzato.Una classe base avente pura funzione virtuale diventa astratta e non può essere rappresentata o istanziata; In parole semplici, significa che il suo oggetto non può essere realizzato.

Per ulteriori informazioni, fare riferimento a Differenza tra funzioni virtuali e funzioni virtuali pure

16. Cosa sono le classi e gli oggetti in C++?

Una classe è un tipo di dati definito dall'utente in cui tutte le funzioni membro e i membri dati sono personalizzati in base alle richieste e ai requisiti, inoltre a tutti è possibile accedere con l'aiuto di un oggetto . Per dichiarare un tipo di dati definito dall'utente utilizziamo una parola chiave classe.

Un oggetto è un'istanza di una classe e un'entità con valore e stato; In termini semplici, viene utilizzato come catalizzatore o per rappresentare un membro della classe. Può contenere parametri diversi o nessuno.

Nota: Una classe è un progetto che definisce le funzioni utilizzate da un oggetto.

Per ulteriori informazioni, fare riferimento a questo Cosa sono le classi e gli oggetti

17. Cos'è la funzione prioritaria?

Quando una funzione con lo stesso nome, stessi argomenti o parametri e lo stesso tipo restituito già presente/dichiarato nella classe base viene utilizzata in una classe derivata, è noto come overriding della funzione. È un esempio di polimorfismo di runtime o associazione tardiva, il che significa che la funzione sovrascritta verrà eseguita al momento dell'esecuzione.

Per ulteriori informazioni, fare riferimento a Sostituzione delle funzioni in C++

18. Quali sono i vari concetti di OOP in C++?

  • Classi : È un tipo di dati definito dall'utente
  • Oggetti : È un'istanza di una classe
  • Astrazione: È una tecnica per mostrare solo i dettagli necessari
  • Incapsulamento: Avvolgimento dei dati in una singola unità
  • Eredità: La capacità di una classe di derivare proprietà e caratteristiche da un'altra classe
  • Polimorfismo: Il polimorfismo è noto come molte forme della stessa cosa

Per ulteriori informazioni, fare riferimento a Vari concetti di OOP in C++

css grassetto

19. Spiegare l'ereditarietà

La capacità o capacità di una classe di derivare proprietà e caratteristiche da un'altra classe è nota come ereditarietà. In termini semplici, è un sistema o una tecnica per riutilizzare ed estendere le classi esistenti senza modificarle.

Per ulteriori informazioni, fare riferimento a Eredità

20. Quando dovremmo utilizzare l’ereditarietà multipla?

Ereditarietà multiple significano che una classe derivata può ereditare due o più classi base/genitore. È utile quando una classe derivata deve combinare numerosi attributi/contratti ed ereditare parte o tutta l'implementazione da questi attributi/contratti. Per fare un esempio di vita reale, considera i tuoi genitori dove il genitore A è il tuo PAPÀ, il genitore B è la tua mamma e il bambino C sei tu.

molteplici eredità

Eredità multiple

Per ulteriori informazioni, fare riferimento a Eredità multipla .

21. Cos'è l'eredità virtuale?

L'ereditarietà virtuale è una tecnica che garantisce che solo una copia delle variabili membro di una classe base venga ereditata dalle classi derivate dal nipote. O in termini semplici, l'ereditarietà virtuale viene utilizzata quando abbiamo a che fare con una situazione di eredità multiple ma vogliamo evitare che più istanze della stessa classe appaiano nella gerarchia di ereditarietà.

22. Cos'è il polimorfismo in C++?

Il polimorfismo è noto come molte forme della stessa cosa. In termini semplici, possiamo dire che il polimorfismo è la capacità di visualizzare una funzione membro in più forme a seconda del tipo di oggetto che le richiama.

In altre parole, possiamo anche dire che un uomo può essere dipendente di qualcuno, figlio di qualcuno, padre di qualcuno e marito di qualcuno; è così che il polimorfismo può essere proiettato nella vita reale.

Esistono 2 tipi di polimorfismo:

  1. Polimorfismo in fase di compilazione
    • Sovraccarico di funzioni
    • Sovraccarico degli operatori
  2. Polimorfismo in fase di esecuzione
    • Funzione prioritaria
    • Funzione virtuale

Per saperne di più, fare riferimento a Polimorfismo

23. Quali sono i diversi tipi di polimorfismo in C++?

Esistono 2 tipi di polimorfismo

Polimorfismo in fase di compilazione o associazione statica

Questo tipo di polimorfismo si ottiene durante la fase di compilazione del programma, il che fa sì che esso risulti un po' più veloce del tempo di esecuzione. Inoltre, l'ereditarietà non è coinvolta in questo. È composto da 2 ulteriori tecniche :

Sovraccarico delle funzioni: Quando sono presenti più funzioni con lo stesso nome ma parametri diversi, si parla di sovraccarico della funzione.

C++
// same name different arguments int GFG() {} int GFG(int a) {} float GFG(double a) {} int GFG(int a, double b) {}>


Sovraccarico dell'operatore: Si tratta sostanzialmente di esercitarsi a dare un significato speciale al significato esistente di un operatore o in termini semplici ridefinire il significato pre-ridefinito

C++
class GFG {  // private and other modes  statements public returnType  operator symbol(arguments){ statements } statements };>

Polimorfismo in fase di esecuzione o associazione tardiva

Il polimorfismo in fase di esecuzione avviene quando le funzioni vengono richiamate durante l'esecuzione.

Funzione prioritaria: L'override della funzione si verifica quando una funzione membro della classe base viene ridefinita in una classe derivata con gli stessi argomenti e tipo restituito.

C++
// C++ program to demonstrate // Function overriding #include  using namespace std; class GFG { public:  virtual void display()  {  cout << 'Function of base class' << endl;  } }; class derived_GFG : public GFG { public:  void display()  {  cout << 'Function of derived class' << endl;  } }; int main() {  derived_GFG dg;  dg.display();  return 0; }>

Produzione:

Function of derived class>

Per ulteriori informazioni, fare riferimento a Diversi tipi di polimorfismo

24. Confronta il polimorfismo in fase di compilazione e il polimorfismo in fase di runtime

Polimorfismo in fase di compilazione

Polimorfismo di runtime

Viene anche chiamato legame statico e legame precoce.Viene anche chiamato rilegatura dinamica e rilegatura tardiva.
È veloce perché l'esecuzione è nota in fase di compilazione.È lento rispetto al tempo di compilazione perché l'esecuzione è nota in fase di esecuzione.
Si ottiene mediante sovraccarico delle funzioni e sovraccarico degli operatori.Si ottiene tramite funzioni virtuali e override delle funzioni.

Per ulteriori informazioni, fare riferimento a Polimorfismo in fase di compilazione e polimorfismo di runtime

25. Spiegare il costruttore in C++.

Un costruttore è un tipo speciale di funzione membro di una classe, il cui nome è lo stesso della classe da cui viene invocato e inizializza il valore sull'oggetto di una classe.

Esistono 3 tipi di costruttori:

A. Costruttore predefinito: È il tipo più elementare di costruttore che non accetta argomenti o parametri. Anche se non viene chiamato, il compilatore lo chiama automaticamente quando viene creato un oggetto.

Esempio:

C++
class Class_name { public:  Class_name() { cout << 'I am a default constructor'; } };>


B. Costruttore parametrizzato: È un tipo di costruttore che accetta argomenti o parametri. Deve essere chiamato esplicitamente passando valori negli argomenti poiché questi argomenti aiutano a inizializzare un oggetto quando viene creato. Ha anche lo stesso nome di quello della classe.

Inoltre, viene utilizzato per sovraccaricare i costruttori.

Esempio:

C++
// CPP program to demonstrate // parameterized constructors #include  using namespace std; class GFG { private:  int x, y; public:  // Parameterized Constructor  GFG(int x1, int y1)  {  x = x1;  y = y1;  }  int getX() { return x; }  int getY() { return y; } }; int main() {  // Constructor called  GFG G(10, 15);  // Access values assigned by constructor  cout << 'G.x = ' << G.getX() << ', G.y = ' << G.getY();  return 0; }>

Produzione

G.x = 10, G.y = 15>

C. Copia costruttore: Un costruttore di copie è una funzione membro che inizializza un oggetto utilizzando un altro oggetto della stessa classe. Inoltre, il costruttore Copy accetta un riferimento a un oggetto della stessa classe come argomento.

Esempio:

...in Java
C++
Sample(Sample& t) { id = t.id; }>


Per ulteriori informazioni, fare riferimento a Costruttori

26. Cosa sono i distruttori in C++?

I distruttori sono membri di funzioni in una classe che eliminano un oggetto quando un oggetto della classe esce dall'ambito. I distruttori hanno lo stesso nome della classe preceduto da un segno tilde (~). Inoltre, i distruttori seguono a dal basso verso l'alto approccio, a differenza dei costruttori che seguono un approccio dall'alto verso il basso.

Sintassi:

~constructor_name(); // tilde sign signifies that it is a destructor>

Per ulteriori informazioni, fare riferimento a Distruttore .

27. Cos'è un distruttore virtuale?

Quando si distruggono istanze o oggetti di una classe derivata utilizzando un oggetto puntatore della classe base, viene richiamato un distruttore virtuale per liberare spazio di memoria allocato dall'oggetto o dall'istanza della classe derivata.

Il distruttore virtuale garantisce che venga chiamato prima il distruttore della classe derivata. Quindi viene chiamato il distruttore della classe base per liberare lo spazio occupato da entrambi i distruttori nella classe di ereditarietà, salvandoci dalla perdita di memoria. Si consiglia di rendere virtuale il distruttore ogni volta che la classe è polimorfica.

Per ulteriori informazioni, fare riferimento a Distruttore virtuale

28. È possibile il sovraccarico del distruttore? Se sì, spiega e se no, perché?

La risposta è semplice NO non possiamo sovraccaricare un distruttore. È obbligatorio solo il distruttore per classe in C++. Inoltre, Destructor non accetta argomenti né ha un parametro che potrebbe aiutare a sovraccaricare.

Domande di intervista C++ - Livello intermedio

29. Quali operazioni sono consentite sui puntatori?

I puntatori sono le variabili utilizzate per memorizzare la posizione dell'indirizzo di un'altra variabile. Le operazioni consentite ad un puntatore sono:

  1. Incremento/Decremento di un Puntatore
  2. Addizione e sottrazione di numeri interi a un puntatore
  3. Confronto di puntatori dello stesso tipo

30. Qual è lo scopo del eliminare operatore?

L'operatore delete viene utilizzato per cancellare/rimuovere tutte le caratteristiche/proprietà da un oggetto deallocando la sua memoria; inoltre, alla fine restituisce true o false. In termini semplici, distrugge o dealloca oggetti array e non array (puntatore) creati da nuove espressioni.

C++
int GFG = new int[100]; // uses GFG for deletion delete[] GFG;>

Per ulteriori informazioni, fare riferimento a Elimina operatore

prova a int

31. In che modo delete [] è diverso da delete?

eliminare[]

eliminare

Viene utilizzato per eliminare un intero arrayViene utilizzato per eliminare un solo puntatore
Viene utilizzato per eliminare gli oggetti di nuovo[]; Con questo possiamo dirlo eliminare[] viene utilizzato per eliminare una serie di oggettiViene utilizzato per eliminare gli oggetti di nuovo; Con questo possiamo dirlo eliminare viene utilizzato per eliminare un singolo oggetto
Può chiamare tutti i distruttori che vuolePuò chiamare il distruttore di una classe solo una volta

32. Cosa sai della classe amico e della funzione amico?

Una classe amica è una classe che può accedere sia alle variabili protette che a quelle private delle classi in cui è dichiarata come amica.

Esempio di classe amici:

C++
class Class_1st {  // ClassB is a friend class of ClassA  friend class Class_2nd;  statements; } class Class_2nd {  statements; }>


Una funzione amico è una funzione utilizzata per accedere ai membri dati privati, protetti e pubblici o alle funzioni membro di altre classi. Viene dichiarato con una parola chiave amico. Il vantaggio di una funzione amico è che non è vincolata all'ambito della classe e una volta dichiarata in una classe, inoltre, non può essere chiamata da un oggetto della classe; quindi può essere chiamato da altre funzioni. Considerando tutti i punti menzionati possiamo dire che una funzione amico è una funzione globale .

Esempio di funzione amico:

C++
class GFG {  statements;  friend dataype function_Name(arguments);  statements; } OR class GFG {  statements' friend int divide(10, 5);  statements; }>


Per ulteriori informazioni, fare riferimento a funzione amico e classe amico

33. Cos'è un errore di overflow?

L'errore di overflow si verifica quando il numero è troppo grande per essere gestito dal tipo di dati. In termini semplici, è un tipo di errore che è valido per quanto definito ma supera l'intervallo definito in cui dovrebbe coincidere/trovarsi.

Ad esempio, l'intervallo del tipo di dati int è –2.147.483.648 A 2.147.483.647 e se dichiariamo una variabile di dimensione 2.247.483.648 genererà un errore di overflow.

34. Cosa fa l'operatore Scope Risoluzione?

Un operatore di risoluzione dell'ambito è indicato con un ' :: simbolo. Proprio come il suo nome, questo operatore risolve la barriera dell'ambito in un programma. Un operatore di risoluzione dell'ambito viene utilizzato per fare riferimento a una funzione membro o a una variabile globale fuori dal proprio ambito, inoltre può anche accedere alla variabile o funzione nascosta in un programma.

La risoluzione dell'ambito viene utilizzata per numerose quantità di attività:

  1. Per accedere a una variabile globale quando esiste una variabile locale con lo stesso nome
  2. Per definire la funzione al di fuori della classe
  3. In caso di eredità multiple
  4. Per lo spazio dei nomi

Per ulteriori informazioni, fare riferimento a Operatore di risoluzione dell'ambito

35. Quali sono i modificatori di accesso C++?

La restrizione di accesso specificata per i membri della classe (che si tratti di una funzione membro o di un membro dati) è nota come modificatori/specificatori di accesso.

I modificatori di accesso sono di 3 tipi:

  1. Privato – Non è possibile accedervi né visualizzarlo dall'esterno della classe
  2. Protetto – È possibile accedervi se e solo se la funzione di accesso è la classe derivata
  3. Pubblico – È possibile accedervi o visualizzarlo dall'esterno della classe

Per ulteriori informazioni, fare riferimento a Modificatori di accesso

36. Puoi compilare un programma senza la funzione principale?

Sì, è assolutamente possibile compilare un programma senza main(). Ad esempio, utilizza le macro che definiscono il file main

C++
// C++ program to demonstrate the // a program without main() #include  #define fun main  int fun(void) {  printf('Geeksforgeeks');  return 0; }>

Per ulteriori informazioni, fare riferimento a Puoi compilare un programma senza la funzione principale

37. Cos'è l'STL?

STL è nota come libreria di modelli standard, è una libreria che fornisce 4 componenti come contenitore, algoritmi e iteratori.

C++STL

Per ulteriori informazioni, fare riferimento a STL in C++

38. Definire la funzione in linea. Possiamo avere una funzione inline ricorsiva in C++?

Una funzione inline è una forma di richiesta e non un ordine a un compilatore che risulta nell'incorporamento della nostra funzione nel corpo della funzione principale. Una funzione inline può diventare un sovraccarico se il tempo di esecuzione della funzione è inferiore al tempo di passaggio dalla funzione chiamante alla funzione chiamata. Per rendere una funzione in linea utilizzare la parola chiave in linea prima e definire la funzione prima che venga effettuata qualsiasi chiamata alla funzione.

Funzione in linea

Spiegazione della funzione in linea

Sintassi:

inline data_type function_name() { Body; }>

La risposta è NO; Non può essere ricorsivo.

Una funzione inline non può essere ricorsiva perché nel caso di una funzione inline il codice viene semplicemente posizionato nella posizione da cui viene chiamato e non mantiene nello stack un'informazione necessaria per la ricorsione.

Inoltre, se scrivi una parola chiave inline davanti a una funzione ricorsiva, il compilatore la ignorerà automaticamente perché l'inline viene presa solo come suggerimento dal compilatore.

Per ulteriori informazioni, fare riferimento a Funzione in linea

39. Cos'è una classe astratta e quando la usi?

Una classe astratta è una classe progettata specificamente per essere utilizzata come classe base. Una classe astratta contiene almeno una funzione virtuale pura. Dichiari una funzione virtuale pura utilizzando a identificatore puro(= 0) nella dichiarazione di una funzione membro virtuale nella dichiarazione della classe

Non è possibile utilizzare una classe astratta come tipo di parametro, tipo restituito da una funzione o tipo di conversione esplicita, né è possibile dichiarare un oggetto di una classe astratta. Tuttavia, può essere utilizzato per dichiarare puntatori e riferimenti a una classe astratta.

Una classe astratta viene utilizzata se si desidera fornire una funzionalità comune e implementata tra tutte le implementazioni del componente. Le classi astratte ti permetteranno di implementare parzialmente la tua classe, mentre le interfacce non avrebbero alcuna implementazione per nessun membro. In parole semplici, le classi astratte sono una buona soluzione se desideri fornire dettagli di implementazione ai tuoi figli ma non vuoi consentire che un'istanza della tua classe venga istanziata direttamente.

40. Quali sono i membri dati statici e le funzioni membro statiche?

Il membro dati statico di una classe è un membro dati normale ma preceduto da una parola chiave statica. Viene eseguito prima di main() in un programma e viene inizializzato su 0 quando viene creato il primo oggetto della classe. È visibile solo a una classe definita ma il suo scopo è duraturo.

Sintassi:

  static Data_Type Data_Member;>

La funzione membro statica è la funzione membro utilizzata per accedere ad altri membri dati statici o ad altre funzioni membro statiche. È anche definito con una parola chiave statica. Possiamo accedere alla funzione membro statica utilizzando il nome della classe o gli oggetti della classe.

Sintassi:

classname::function name(parameter);>

Domande di intervista C++ - Livello esperto

41. Qual è l'uso principale della parola chiave Volatile?

Proprio come il suo nome, le cose possono cambiare all'improvviso e inaspettatamente; Quindi viene utilizzato per informare il compilatore che il valore può cambiare in qualsiasi momento. Inoltre, la parola chiave volatile impedisce al compilatore di eseguire l'ottimizzazione del codice. Doveva essere utilizzato durante l'interfacciamento con hardware mappato in memoria, gestori di segnali e istruzioni del codice macchina.

Per ulteriori informazioni, fare riferimento a questo Volatile

42. Definire la classe di archiviazione in C++ e nominarne alcune

La classe di archiviazione viene utilizzata per definire le caratteristiche (durata e visibilità) di una variabile o funzione. Queste funzionalità solitamente aiutano a tracciare l'esistenza di una variabile durante l'esecuzione di un programma.

Sintassi:

storage_class var_data_type var_name;>

Alcuni tipi di classi di archiviazione:

Esempi di classe di archiviazione

Per ulteriori informazioni, fare riferimento a Classe di archiviazione

43. Che cos'è un identificatore di classe di archiviazione modificabile? Come possono essere utilizzati?

Proprio come il suo nome, l'identificatore della classe di archiviazione mutabile viene utilizzato solo su un membro dati della classe per renderlo modificabile anche se il membro fa parte di un oggetto dichiarato come const. I membri statici, const o di riferimento non possono utilizzare l'identificatore mutabile. Quando dichiariamo una funzione come const, il puntatore passato alla funzione diventa const.

44. Definire la variabile Ambito blocco.

Quindi l'ambito di una variabile è una regione in cui una variabile è accessibile. Esistono due regioni di ambito, A globale e bloccata o locale.

Una variabile con ambito di blocco è nota anche come variabile con ambito locale. Una variabile definita all'interno di una funzione (come main) o all'interno di un blocco (come loops e if block) è una variabile locale. Può essere utilizzato SOLO all'interno di quella particolare funzione/blocco in cui è dichiarato. una variabile con ambito blocco non sarà disponibile all'esterno del blocco anche se il blocco si trova all'interno di una funzione.

Per ulteriori informazioni, fare riferimento a Ambito di una variabile

45. Qual è la funzione della parola chiave Auto?

La parola chiave auto può essere utilizzata per dichiarare una variabile di tipo complesso in modo semplice. Puoi utilizzare auto per dichiarare una variabile se la frase di inizializzazione contiene modelli, puntatori a funzioni, riferimenti a membri, ecc. Con le funzionalità di inferenza del tipo, possiamo dedicare meno tempo a scrivere cose che il compilatore già conosce. Poiché tutti i tipi vengono dedotti solo in fase di compilazione, il tempo di compilazione aumenta leggermente ma non influisce sul runtime del programma.

Per ulteriori informazioni, fare riferimento a Auto in C++

46. ​​Definire lo spazio dei nomi in C++.

Gli spazi dei nomi ci consentono di organizzare elementi con nome che altrimenti avrebbero un ambito globale in ambiti più piccoli, permettendoci di dare loro un ambito dello spazio dei nomi. Ciò consente di organizzare parti del programma in ambiti logici distinti con nomi. Lo spazio dei nomi fornisce un luogo in cui definire o dichiarare identificatori come variabili, metodi e classi.

Oppure potremmo dire che uno spazio dei nomi è una zona dichiarativa che fornisce un ambito agli identificatori (nomi di tipi, funzioni, variabili e così via) al suo interno. Gli spazi dei nomi vengono utilizzati per organizzare il codice in categorie logiche e per evitare conflitti di nomi, che potrebbero verificarsi quando nella codebase sono presenti molte librerie.

Per ulteriori informazioni, fare riferimento a Spazio dei nomi in C++

47. Quando viene utilizzato il tipo di ritorno void()?

La parola chiave void, se utilizzata come tipo restituito da una funzione, indica che la funzione non restituisce un valore. Quando utilizzato come elenco di parametri per una funzione, void indica che la funzione non accetta parametri. Le funzioni che non restituiscono valore sono note anche come funzioni void. Si chiamano nulli poiché non sono progettati per restituire nulla. Vero, ma solo in parte. Non possiamo restituire valori da funzioni void, ma possiamo certamente restituire qualcosa. Sebbene le funzioni void non abbiano un tipo restituito, possono restituire valori.

Per ulteriori informazioni, fare riferimento a Tipo di reso nullo .

48. Qual è la differenza tra copia superficiale e copia profonda?

Copia superficiale

istruzione di stampa in Java

Copia profonda

Nella copia superficiale, viene archiviata una copia dell'oggetto originale e alla fine viene copiato solo l'indirizzo di riferimento. In termini semplici, la copia superficiale duplica il meno possibileNella copia profonda, vengono archiviate sia la copia dell'oggetto originale che le copie ripetitive. In termini semplici, la copia profonda duplica tutto
Una copia superficiale di una raccolta è una copia della struttura della raccolta, non degli elementi. Con una copia superficiale, due raccolte ora condividono singoli elementi.Una copia profonda di una raccolta è composta da due raccolte con tutti gli elementi della raccolta originale duplicati.
Una copia superficiale è più veloceLa copia profonda è relativamente più lenta.

Per ulteriori informazioni, fare riferimento a Copia superficiale VS copia profonda

49. Possiamo chiamare una funzione virtuale da un costruttore?

Sì, possiamo chiamare una funzione virtuale da un costruttore. Ma può generare un'eccezione di override.

50. Cosa sono i puntatori void?

Proprio come il suo nome, un puntatore void è un puntatore che non è associato a nulla o ad alcun tipo di dati. Tuttavia, un puntatore void può contenere il valore dell'indirizzo di qualsiasi tipo e può essere convertito da un tipo di dati a un altro.

Per ulteriori informazioni fare riferimento a Puntatore al vuoto in C++

Domanda bonus:

Cosa è ' Questo ‘ puntatore in C++?

Questo pointer consente ad ogni oggetto di accedere al proprio indirizzo tramite un puntatore essenziale. Tutte le funzioni membro assumono Questo puntatore come argomento implicito. Questo puntatore può essere utilizzato per fare riferimento all'oggetto chiamante all'interno di una funzione membro.

  • Questo il puntatore viene utilizzato per passare un oggetto come parametro a un altro metodo.
  • Ogni oggetto ottiene la propria copia del membro dati.
  • Questo Il puntatore viene utilizzato per dichiarare gli indicizzatori.

Per ulteriori informazioni, fare riferimento a Questo puntatore in C++