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.

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++ :
- C++ è un linguaggio OOP, il che significa che i dati sono considerati oggetti.
- Il C++ è un linguaggio multiparadigma; In termini semplici, significa che possiamo programmare la logica, la struttura e la procedura del programma.
- La gestione della memoria è una funzionalità chiave in C++ poiché consente l'allocazione dinamica della memoria
- È 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++?

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 insufficiente | I 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:
- Parole chiave – Che contengono un significato speciale per il compilatore
- Identificatori – Che possiedono un valore/identità unica
- Costanti – Che non cambiano mai il loro valore durante tutto il programma
- stringhe – Che contiene la sequenza omogenea dei dati
- Simboli speciali – Hanno un significato speciale e non possono essere utilizzati per altri scopi; per esempio: [] () {}, ; * = #
- 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 operatori | Supporta 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à pubblica | I 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 stack | La 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 riassegnato | Il 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 alias | Può contenere o puntare a nullo valore ed essere definito come a nullptr O puntatore nullo |
| Non può funzionare con gli array | Può 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 direttamente | Non è 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 funzione | 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 |
| 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 diversi | Il 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:
| Esempio di sovraccarico dell'operatore:
|
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 controllato | Il ciclo do- while è definito ciclo di controllo di uscita |
| Se la condizione non è soddisfatta le istruzioni all'interno del ciclo non verranno eseguite | Anche 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'operando | Significa 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 sinistra | L'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'operazione | malloc è una funzione che restituisce e accetta valori |
| new chiama i costruttori | malloc non può chiamare un costruttore |
| new è più veloce di malloc poiché è un operatore | malloc è più lento di new in quanto è una funzione |
| new restituisce il tipo di dati esatto | malloc 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.

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:
- Polimorfismo in fase di compilazione
- Sovraccarico di funzioni
- Sovraccarico degli operatori
- 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
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++ 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 JavaC++
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:
- Incremento/Decremento di un Puntatore
- Addizione e sottrazione di numeri interi a un puntatore
- 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 array | Viene 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 oggetti | Viene 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 vuole | Può 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à:
- Per accedere a una variabile globale quando esiste una variabile locale con lo stesso nome
- Per definire la funzione al di fuori della classe
- In caso di eredità multiple
- 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:
- Privato – Non è possibile accedervi né visualizzarlo dall'esterno della classe
- Protetto – È possibile accedervi se e solo se la funzione di accesso è la classe derivata
- 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.

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 possibile | Nella 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ù veloce | La 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++