logo

Întrebări și răspunsuri la interviu C++ (2024)

C++ – limbajul de programare neapărat și preferat din toate timpurile al programatorilor. Este încă relevant așa cum era la mijlocul anilor 80. Fiind un limbaj de programare cu scop general și orientat pe obiecte, este utilizat pe scară largă în cea mai mare parte de fiecare dată în timpul codificării. Ca rezultat, unele roluri de muncă cer ca indivizii să cunoască fluent C++. Este utilizat de companii IT de top, cum ar fi Evernote, LinkedIn, Microsoft, Opera, NASA , și Meta datorită fiabilității, performanței și gamei largi de setări în care poate fi utilizat. Deci, pentru a intra în aceste companii, trebuie să fii amănunțit în acestea primele 50 de întrebări de interviu C++ ceea ce te poate face să pari un expert în fața recrutorilor.

Top 50 de întrebări de interviu C++ pentru cei proaspăt și cu experiență (2022)

Pentru a vă pregăti pentru interviu, v-am adus Top 50 de întrebări de interviu C++ pentru incepator, intermediar si experimentat prin care trebuie neapărat să treci pentru a te plasa în topul MNC-urilor.

Întrebări de interviu C++ pentru cei proaspăt

1. Ce este C++? Care sunt avantajele C++?

C++ este un limbaj de programare orientat pe obiecte care a fost introdus pentru a depăși jurisdicțiile în care C lipsea. Prin orientat pe obiecte înțelegem că funcționează cu conceptul de polimorfism , moştenire , abstractizare , încapsulare , obiect și clasă .



Avantajele C++ :

  1. C++ este un limbaj OOP, ceea ce înseamnă că datele sunt considerate obiecte.
  2. C++ este un limbaj multi-paradigma; În termeni simpli, înseamnă că putem programa logica, structura și procedura programului.
  3. Gestionarea memoriei este o caracteristică cheie în C++, deoarece permite alocarea dinamică a memoriei
  4. Este un limbaj de programare de nivel mediu, ceea ce înseamnă că poate dezvolta jocuri, aplicații desktop, drivere și nuclee

Pentru a citi mai multe, consultați articolul - Care sunt avantajele C++?

2. Care sunt diferitele tipuri de date prezente în C++?

tipuri de date în C++

Diferite tipuri de tipuri de date în C++

Pentru mai multe informații, consultați ' std’ este cunoscut și ca Standard sau poate fi interpretat ca un spațiu de nume. Comanda folosind namespace std informează compilatorul să adauge totul sub spațiu de nume std si inculca-le in spațiu de nume global . Toată această inculcare a spațiului de nume global ne avantajează să o folosim cout și mâncând fara a folosi std::_operator_.

Pentru mai multe informații, consultați namespace și std .

4. Ce sunt referințele în C++?

Când o variabilă este descrisă ca referință, aceasta devine un alias al variabilei deja existente. În termeni simpli, o variabilă de referință este o altă variabilă numită a unei variabile existente, ținând cont de faptul că modificările făcute în variabila de referință se vor reflecta în variabila deja existentă. O variabilă de referință este precedată de a '&' simbol.

Sintaxă:

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

Pentru mai multe informații, consultați referințe în C++

5. Ce înțelegeți prin Apel după valoare și Apel prin referință?

În acest limbaj de programare pentru a apela o funcție avem 2 metode: Apel după valoare și Apel prin referință

Apel după valoare

Apel prin referință

Se transmite o copie a unei variabile.O variabilă în sine este trecută fundamental.
Apelarea unei funcții prin trimiterea valorilor prin copierea variabilelor.Apelarea unei funcții prin trimiterea adresei variabilei transmise.
Modificările efectuate în funcție nu se reflectă niciodată în afara funcției asupra variabilei. Pe scurt, valoarea inițială nu este niciodată modificată în Call by Value.Modificările efectuate în funcții pot fi văzute în afara funcției pe funcția trecută. Pe scurt, valoarea inițială este modificată în Apel prin referință.
Parametrii actuali și formali trecuți sunt stocați în diferite locații de memorie. Prin urmare, făcând Call by Value puțină memorie insuficientăParametrii actuali și formali trecuți sunt stocați în aceeași locație de memorie. Prin urmare, făcând apelul prin referință puțin mai eficient memoria.

Pentru informații, consultați diferența dintre apelul după valoare și apelul prin referință

6. Definiți tokenul în C++

Un token este cel mai mic element individual al unui program care este înțeles de un compilator. Un jeton cuprinde următoarele:

  1. Cuvinte cheie – Care au o semnificație specială pentru compilator
  2. Identificatori – Care dețin o valoare/identitate unică
  3. constante – Care nu își schimbă niciodată valoarea pe tot parcursul programului
  4. Siruri de caractere – Care conține secvența omogenă de date
  5. Simboluri speciale – Au o semnificație specială și nu pot fi folosite în alt scop; de exemplu: [] () {}, ; * = #
  6. Operatori – Cine efectuează operații asupra operandului

Pentru mai multe informații, consultați Jetoane în C++

7. Care este diferența dintre C și C++?

C

C++

Este un limbaj de programare procedural. Cu cuvinte simple, nu acceptă clase și obiecteEste un amestec de limbaje de programare procedurale și orientate pe obiecte. Cu cuvinte simple, acceptă clase și obiecte.
Nu acceptă concepte OOP precum polimorfismul, abstracția datelor, încapsularea, clasele și obiectele.Acceptă toate conceptele de date
Nu acceptă supraîncărcarea funcțiilor și a operatoruluiAcceptă supraîncărcarea funcției și respectiv a operatorului
Este un limbaj bazat pe funcțiiEste un limbaj bazat pe obiecte

Pentru mai multe informații, consultați Diferența dintre C și C++

8. Care este diferența dintre struct și class?

Struct

Clasă

Membrii structurii sunt întotdeauna în mod implicit publicMembrii clasei pot fi în mod privat, protejat și public.
Structurile sunt de tipul valorii. Ele dețin doar valoare în memorie.Clasele sunt de tip referință. Deține o referință a unui obiect în memorie.
Memoria din structuri este stocată ca stiveMemoria din clase este stocată ca grămezi.

Pentru mai multe informații, consultați Diferența dintre struct și clasă.

9. Care este diferența dintre referință și indicator?

Referinţă

string java indexof

Indicator

Valoarea unei referințe nu poate fi reatribuităValoarea unui pointer poate fi reatribuită
Nu poate ține niciodată un nul valoare deoarece are nevoie de o valoare existentă pentru a deveni un aliasPoate să țină sau să îndrepte spre a nul valoare și să fie denumit ca a nullptr sau indicator nul
Nu poate funcționa cu matricePoate funcționa cu matrice
Pentru a accesa membrii clasei/structurilor se folosește un „ . 'Pentru a accesa membrii clasei/structurilor se folosește un „ -> '
Locația de memorie de referință poate fi accesată cu ușurință sau poate fi utilizată directLocația de memorie a unui pointer nu poate fi accesată cu ușurință deoarece trebuie să folosim o dereferire „ * '

Pentru mai multe informații, consultați Diferența dintre referință și indicator

10. Care este diferența dintre supraîncărcarea funcției și supraîncărcarea operatorului?

Supraîncărcarea funcției

Supraîncărcarea operatorului

Practic, este definirea unei funcții în mai multe moduri, astfel încât există multe moduri de a o apela sau, în termeni simpli, aveți mai multe versiuni ale aceleiași funcțiiPractic este să dea practica de a da o semnificație specială semnificației existente a unui operator sau, în termeni simpli, redefinirea semnificației pre-redefinite.
Funcțiile parametrizate sunt un bun exemplu de supraîncărcare a funcției, deoarece doar schimbând argumentul sau parametrul unei funcții o faceți utilă pentru diferite scopuriPolimorfismul este un bun exemplu de supraîncărcare a unui operator, deoarece un obiect al clasei de alocări poate fi folosit și apelat de diferite clase în scopuri diferite.

Exemplu de supraîncărcare a funcției:

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

Exemplu de supraîncărcare a operatorului:

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

Pentru mai multe informații, consultați Supraîncărcarea operatorului și Supraîncărcare funcție

11. Care este diferența dintre o matrice și o listă?

Matrice

Liste

Matricele sunt locații de memorie contigue de tipuri de date omogene stocate într-o locație sau dimensiune fixă.Listele sunt elemente clasice individuale care sunt legate sau conectate între ele cu ajutorul pointerilor și nu au o dimensiune fixă.
Matricele sunt de natură statică.Listele sunt de natură dinamică
Utilizează mai puțină memorie decât listele legate.Utilizează mai multă memorie deoarece trebuie să stocheze valoarea și locația de memorie a indicatorului

Pentru mai multe informații, consultați Arrays vs List

12. Care este diferența dintre o buclă while și o buclă do-while?

While Loop

do-while Loop

Bucla în timp ce este denumită și buclă controlată de intrareBucla do-while este denumită buclă de control de ieșire
Dacă condiția nu este îndeplinită, instrucțiunile din bucla nu se vor executaChiar dacă condiția nu este îndeplinită, instrucțiunile din interiorul buclei se vor executa cel puțin o dată

Exemplu de o buclă while:

în timp ce (condiție)

{instrucțiuni de executat;};

Exemplu a unei bucle do-while:

face {

instrucțiunile care urmează să fie executate;

} while(condiție sau expresie);

Pentru mai multe informații, consultați Diferența dintre bucla while și do-while

13. Discutați diferența dintre prefix și postfix?

prefix

postfix

Înseamnă pur și simplu să puneți operatorul înaintea operanduluiÎnseamnă pur și simplu a pune operatorul după operand
Se execută singur înainte '; ' Se execută singur după '; '
Asociativitatea prefixului ++ este de la dreapta la stângaAsociativitatea postfixului ++ este de la stânga la dreapta

Pentru mai multe informații, consultați Diferența dintre prefix și postfix

14. Care este diferența dintre new și malloc()?

nou

malloc()

new este un operator care efectuează o operațiemalloc este o funcție care returnează și acceptă valori
new apelează constructoriimalloc nu poate apela un constructor
new este mai rapid decât malloc, deoarece este un operatormalloc este mai lent decât nou deoarece este o funcție
new returnează tipul exact de datemalloc returnează nul*

Pentru mai multe informații, consultați Diferența dintre new și malloc()

15. Care este diferența dintre funcțiile virtuale și funcțiile virtuale pure?

Funcția virtuală

Funcție virtuală pură

O funcție virtuală este o funcție membră a unei clase de bază care poate fi redefinită într-o altă clasă derivată.O funcție virtuală pură este o funcție membră a unei clase de bază care este declarată doar într-o clasă de bază și definită într-o clasă derivată pentru a preveni ca aceasta să devină o clasă abstractă.
O funcție virtuală își are definiția în clasa de bază respectivă.Nu există nicio definiție în Pure Virtual Function și este inițializată cu un specificator pur (= 0).
Clasa de bază are o funcție virtuală care poate fi reprezentată sau instanțată; Cu cuvinte simple, obiectul său poate fi făcut.O clasă de bază cu funcție virtuală pură devine abstractă care nu poate fi reprezentată sau instanțată; Cu cuvinte simple, înseamnă că obiectul său nu poate fi făcut.

Pentru mai multe informații, consultați Diferența dintre funcțiile virtuale și funcțiile virtuale pure

16. Ce sunt clasele și obiectele în C++?

O clasă este un tip de date definit de utilizator în care toate funcțiile membrilor și membrii datelor sunt personalizate în funcție de cerințe și cerințe, în plus, acestea pot fi accesate cu ajutorul unui obiect . Pentru a declara un tip de date definit de utilizator, folosim un cuvânt cheie clasă.

Un obiect este o instanță a unei clase și a unei entități cu valoare și stare; În termeni simpli, este folosit ca catalizator sau pentru a reprezenta un membru al clasei. Poate conține parametri diferiți sau niciunul.

Notă: O clasă este un plan care definește funcțiile care sunt utilizate de un obiect.

Pentru mai multe informații, consultați aceasta Ce sunt clasele și obiectele

matrice în java

17. Ce este suprascrierea funcției?

Atunci când o funcție cu același nume, aceleași argumente sau parametri și același tip de returnare deja prezent/declarat în clasa de bază este utilizată într-o clasă derivată, este cunoscut sub numele de Suprascrierea funcției. Este un exemplu de polimorfism în timp de execuție sau legare tardivă, ceea ce înseamnă că funcția suprascrisă va fi executată în timpul execuției.

Pentru mai multe informații, consultați Suprascrierea funcției în C++

18. Care sunt diferitele concepte OOP în C++?

  • Clase : Este un tip de date definit de utilizator
  • Obiecte : Este o instanță a unei clase
  • Abstracție: Este o tehnică de a arăta doar detaliile necesare
  • Încapsulare: Împachetarea datelor într-o singură unitate
  • Moştenire: Capacitatea unei clase de a deriva proprietăți și caracteristici dintr-o altă clasă
  • Polimorfism: Polimorfismul este cunoscut ca multe forme ale aceluiași lucru

Pentru mai multe informații, consultați Diverse concepte OOP în C++

19. Explicați moștenirea

Capacitatea sau capacitatea unei clase de a deriva proprietăți și caracteristici dintr-o altă clasă este cunoscută sub numele de moștenire. În termeni simpli, este un sistem sau tehnică de reutilizare și extindere a claselor existente fără a le modifica.

Pentru mai multe informații, consultați Moştenire

20. Când ar trebui să folosim moștenirea multiplă?

Moștenirile multiple înseamnă că o clasă derivată poate moșteni două sau mai multe clase de bază/părinte. Este util atunci când o clasă derivată trebuie să combine numeroase atribute/contracte și să moștenească unele, sau toate, implementarea din aceste atribute/contracte. Pentru a lua un exemplu din viața reală, luați în considerare părinții voștri, unde părintele A este TATĂL dvs. Părintele B este mama voastră și copilul C sunteți tu.

moșteniri multiple

Moșteniri multiple

Pentru mai multe informații, consultați Moștenirea multiplă .

21. Ce este moștenirea virtuală?

Moștenirea virtuală este o tehnică care asigură că o singură copie a variabilelor membre ale unei clase de bază este moștenită de clasele derivate de la nepoți. Sau, în termeni simpli, moștenirea virtuală este folosită atunci când avem de-a face cu o situație de moșteniri multiple, dar dorim să împiedicăm mai multe instanțe ale aceleiași clase să apară în ierarhia moștenirii.

22. Ce este polimorfismul în C++?

Polimorfismul este cunoscut ca multe forme ale aceluiași lucru. În termeni simpli, putem spune că Polimorfismul este capacitatea de a afișa o funcție membru în forme multiple, în funcție de tipul de obiect care le numește.

Cu alte cuvinte, putem spune și că un bărbat poate fi un angajat al cuiva, un fiu al cuiva, un tată al cuiva și un soț al cuiva; asa poate fi proiectat polimorfismul in viata reala.

Există 2 tipuri de polimorfism:

  1. Polimorfismul timpului de compilare
    • Supraîncărcarea funcției
    • Supraîncărcarea operatorului
  2. Polimorfismul timpului de rulare
    • Suprascrierea funcției
    • Funcția virtuală

Pentru a afla mai multe despre el, consultați Polimorfism

23. Care sunt diferitele tipuri de polimorfism în C++?

Există 2 tipuri de polimorfism

Polimorfismul timpului de compilare sau legarea statică

Acest tip de polimorfism se realizează în timpul de compilare a programului, ceea ce duce la o creștere puțin mai rapidă decât timpul de execuție. De asemenea, Moștenirea nu este implicată în asta. Este compus din 2 tehnici suplimentare :

Supraîncărcare funcție: Când există mai multe funcții cu același nume, dar parametri diferiți, atunci aceasta este cunoscută sub numele de supraîncărcare a funcției.

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


Supraîncărcarea operatorului: Practic este să dea practica de a da o semnificație specială semnificației existente a unui operator sau, în termeni simpli, redefinirea semnificației pre-redefinite.

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

Polimorfism în timp de rulare sau Legare tardivă

Polimorfismul în timpul rulării are loc atunci când funcțiile sunt invocate în timpul rulării.

Suprascrierea funcției: Suprascrierea funcției are loc atunci când o funcție membru al clasei de bază este redefinită într-o clasă derivată cu aceleași argumente și tip returnat.

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; }>

Ieșire:

Function of derived class>

Pentru mai multe informații, consultați Diferite tipuri de polimorfism

24. Comparați polimorfismul în timp de compilare și polimorfismul în timpul execuției

Polimorfism în timp de compilare

Polimorfismul de rulare

Este, de asemenea, denumită legarea statică și legarea timpurie.Este, de asemenea, denumită Legare dinamică și Legare tardivă.
Este rapid, deoarece execuția este cunoscută devreme în timpul compilării.Este lent în comparație cu timpul de compilare, deoarece execuția este cunoscută în timpul execuției.
Se realizează prin supraîncărcarea funcției și supraîncărcarea operatorului.Se realizează prin funcții virtuale și suprascrierea funcției.

Pentru mai multe informații, consultați Polimorfism în timp de compilare și polimorfism în timp de execuție

25. Explicați constructorul în C++.

Un constructor este un tip special de funcție membru al unei clase, al cărui nume este același cu cel al clasei de către care este invocat și inițializează valoarea obiectului unei clase.

Există 3 tipuri de constructori:

A. Constructor implicit: Este cel mai elementar tip de constructor care nu acceptă argumente sau parametri. Chiar dacă nu este numit, compilatorul îl apelează automat atunci când este creat un obiect.

Exemplu:

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


B. Constructor parametrizat: Este un tip de constructor care acceptă argumente sau parametri. Trebuie apelat explicit prin trecerea de valori în argumente, deoarece aceste argumente ajută la inițializarea unui obiect atunci când este creat. De asemenea, are același nume cu cel al clasei.

De asemenea, este folosit pentru a supraîncărca constructorii.

Exemplu:

metoda de comparare java
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; }>

Ieșire

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

C. Constructor de copiere: Un constructor de copiere este o funcție membru care inițializează un obiect folosind un alt obiect din aceeași clasă. De asemenea, constructorul Copy preia o referință la un obiect din aceeași clasă ca argument.

Exemplu:

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


Pentru mai multe informații, consultați Constructorii

26. Ce sunt destructorii în C++?

Destructorii sunt membri ai funcțiilor dintr-o clasă care șterg un obiect atunci când un obiect al clasei iese din domeniul de aplicare. Destructorii au același nume ca și clasa precedat de un semn tilde (~). De asemenea, destructorii urmează a jos în sus abordare, spre deosebire de constructorii care urmează o abordare de sus în jos.

Sintaxă:

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

Pentru mai multe informații, consultați Distrugător .

27. Ce este un destructor virtual?

Când distrugeți instanțe sau obiecte ale unei clase derivate folosind un obiect pointer clasa de bază, un destructor virtual este invocat pentru a elibera spațiul de memorie alocat de obiectul sau instanța de clasă derivată.

Destructorul virtual garantează că mai întâi este numit destructorul clasei derivate. Apoi, destructorul clasei de bază este chemat să elibereze spațiul ocupat de ambii destructori în clasa de moștenire, ceea ce ne salvează de scurgerea de memorie. Este recomandat să vă faceți destructorul virtual ori de câte ori clasa dvs. este polimorfă.

Pentru mai multe informații, consultați Distrugător virtual

28. Este posibilă supraîncărcarea destructorului? Dacă da, atunci explicați și dacă nu, atunci de ce?

Răspunsul simplu este NU nu putem supraîncărca un destructor. Este obligatoriu doar destructorul pe clasă în C++. De asemenea, de menționat, Destructorul nici nu acceptă argumente și nici nu are un parametru care ar putea ajuta la supraîncărcare.

Întrebări de interviu C++ – Nivel Intermediar

29. Ce operații sunt permise pe pointere?

Pointerii sunt variabilele care sunt folosite pentru a stoca locația adresei unei alte variabile. Operațiile care sunt permise pentru un pointer sunt:

755 chmod
  1. Creșterea/Scăderea unui indicator
  2. Adunarea și scăderea unui număr întreg la un pointer
  3. Comparație de indicatori de același tip

30. Care este scopul șterge operator?

Operatorul de ștergere este folosit pentru a șterge/elimina toate caracteristicile/proprietățile dintr-un obiect prin dealocarea memoriei acestuia; în plus, returnează adevărat sau fals în final. În termeni simpli, distruge sau dealoca obiectele matrice și non-matrice (pointer) care sunt create de noi expresii.

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

Pentru mai multe informații, consultați Șterge operator

31. Cum este diferită ștergerea [] de ștergere?

șterge[]

șterge

Este folosit pentru ștergerea unui întreg tablouEste folosit pentru a șterge un singur indicator
Este folosit pentru ștergerea obiectelor din nou[]; Prin aceasta, putem spune că șterge[] este folosit pentru a șterge o serie de obiecteEste folosit pentru ștergerea obiectelor din nou; Prin aceasta, putem spune că șterge este folosit pentru a șterge un singur obiect
Poate chema cati distrugatori dorestePoate apela o singură dată distrugătorul unei clase

32. Ce știi despre clasa de prieteni și funcția de prieteni?

O clasă prieten este o clasă care poate accesa atât variabilele protejate, cât și cele private ale claselor în care este declarată ca prietenă.

Exemplu de clasă de prieteni:

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


O funcție prieten este o funcție utilizată pentru a accesa membrii datelor private, protejate și publice sau funcțiile membre ale altor clase. Este declarat cu un cuvânt cheie prieten. Avantajul unei funcții prieten este că nu este legată de domeniul de aplicare al clasei și odată ce este declarată într-o clasă, în plus, nu poate fi apelată de un obiect al clasei; prin urmare poate fi apelat de alte funcții. Luând în considerare toate punctele menționate putem spune că o funcție prieten este o funcție globală .

Exemplu de funcție prieten:

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


Pentru mai multe informații, consultați funcția de prieteni și clasa de prieteni

33. Ce este o eroare de depășire?

Eroare de depășire apare atunci când numărul este prea mare pentru a fi gestionat de tipul de date. În termeni simpli, este un tip de eroare care este valabil pentru cel definit, dar depășește intervalul definit în care ar trebui să coincidă/mint.

De exemplu, intervalul de tip de date int este –2.147.483.648 la 2.147.483.647 iar dacă declarăm o variabilă de mărime 2.247.483.648 va genera o eroare de overflow.

34. Ce face operatorul Scope Resolution?

Un operator de rezoluție a domeniului de aplicare este notat cu „ :: ‘ simbol. La fel ca numele său, acest operator rezolvă bariera de aplicare a unui program. Un operator de rezoluție a domeniului este utilizat pentru a face referire la o funcție membru sau o variabilă globală în afara domeniului lor de aplicare, la care poate accesa și variabila sau funcția ascunsă dintr-un program.

Rezoluția scopului este utilizată pentru numeroase sarcini:

  1. Pentru a accesa o variabilă globală atunci când există o variabilă locală cu același nume
  2. Pentru a defini funcția în afara clasei
  3. În cazul moștenirilor multiple
  4. Pentru spațiu de nume

Pentru mai multe informații, consultați Operator rezoluție domeniului

35. Care sunt modificatorii de acces C++?

Restricția de acces specificată pentru membrii clasei (fie că este o funcție membru sau membru de date) este cunoscută ca modificatori/specificatori de acces.

Modificatorii de acces sunt de 3 tipuri:

  1. Privat - Nu poate fi accesat și nici vizualizat din afara clasei
  2. protejat - Poate fi accesat dacă și numai dacă accesorul este clasa derivată
  3. Public - Poate fi accesat sau vizualizat din afara clasei

Pentru mai multe informații, consultați Modificatori de acces

36. Puteți compila un program fără funcția principală?

Da, este absolut posibil să compilați un program fără main(). De exemplu, Folosiți macrocomenzi care definesc principalul

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

Pentru mai multe informații, consultați Puteți compila un program fără funcția principală

37. Ce este STL?

STL este cunoscut ca Bibliotecă de șabloane standard, este o bibliotecă care oferă 4 componente precum container, algoritmi și iteratoare.

C++ STL

Pentru mai multe informații, consultați STL în C++

38. Definiți funcția inline. Putem avea o funcție inline recursivă în C++?

O funcție inline este o formă de solicitare, nu o comandă către un compilator, care are ca rezultat integrarea funcției noastre în corpul funcției principale. O funcție inline poate deveni overhead dacă timpul de execuție al funcției este mai mic decât timpul de comutare de la funcția apelant la funcția apelată. Pentru a face o funcție în linie, utilizați cuvântul cheie în linie înainte și definiți funcția înainte de a fi efectuate apeluri către funcție.

Funcție în linie

Explicația funcției în linie

Sintaxă:

inline data_type function_name() { Body; }>

Raspunsul este Nu; Nu poate fi recursiv.

O funcție inline nu poate fi recursivă deoarece, în cazul unei funcții inline, codul este plasat doar în poziția de unde este apelat și nu menține o informație pe stivă care este necesară pentru recursivitate.

În plus, dacă scrieți un cuvânt cheie inline în fața unei funcții recursive, compilatorul îl va ignora automat, deoarece inline este luat doar ca o sugestie de către compilator.

Pentru mai multe informații, consultați Funcție în linie

39. Ce este o clasă abstractă și când o folosești?

O clasă abstractă este o clasă care este special concepută pentru a fi utilizată ca clasă de bază. O clasă abstractă conține cel puțin o funcție virtuală pură. Declarați o funcție virtuală pură folosind a specificator pur (= 0) în declarația unei funcții de membru virtual în declarația de clasă

Nu puteți utiliza o clasă abstractă ca tip de parametru, un tip de returnare a funcției sau tipul unei conversii explicite și nici nu puteți declara un obiect al unei clase abstracte. Cu toate acestea, poate fi folosit pentru a declara pointeri și referințe la o clasă abstractă.

O clasă abstractă este utilizată dacă doriți să furnizați o funcționalitate comună, implementată între toate implementările componentei. Clasele abstracte vă vor permite să implementați parțial clasa, în timp ce interfețele nu ar avea nicio implementare pentru niciun membru. Cu cuvinte simple, clasele abstracte sunt potrivite dacă doriți să oferiți detalii de implementare copiilor dvs., dar nu doriți să permiteți instanțiarea directă a unei instanțe a clasei dvs.

40. Care sunt membrii de date statice și funcțiile membrilor statici?

Membrul de date static al unei clase este un membru de date normal, dar precedat de un cuvânt cheie static. Se execută înainte de main() într-un program și este inițializat la 0 când este creat primul obiect al clasei. Este vizibil doar pentru o clasă definită, dar domeniul său este de viață.

Sintaxă:

  static Data_Type Data_Member;>

Funcția membru static este funcția membru care este utilizată pentru a accesa alți membri de date statice sau alte funcții membre statice. De asemenea, este definit cu un cuvânt cheie static. Putem accesa funcția membru static folosind numele clasei sau obiectele clasei.

Sintaxă:

classname::function name(parameter);>

Întrebări de interviu C++ – Nivel expert

41. Care este principala utilizare a cuvântului cheie Volatil?

La fel ca și numele său, lucrurile se pot schimba brusc și neașteptat; Deci, este folosit pentru a informa compilatorul că valoarea se poate schimba oricând. De asemenea, cuvântul cheie volatil împiedică compilatorul să efectueze optimizarea codului. Acesta a fost conceput pentru a fi utilizat la interfața cu hardware-ul mapat în memorie, manipulatorii de semnal și instrucțiunile de cod de mașină.

Pentru mai multe informații, consultați aceasta Volatil

42. Definiți clasa de stocare în C++ și numiți câteva

Clasa de stocare este utilizată pentru a defini caracteristicile (durata de viață și vizibilitatea) unei variabile sau funcție. Aceste caracteristici ajută de obicei la urmărirea existenței unei variabile în timpul rulării unui program.

Sintaxă:

storage_class var_data_type var_name;>

Unele tipuri de clase de stocare:

Exemple de clasa de stocare

Pentru mai multe informații, consultați Clasa de stocare

43. Ce este un specificator de clasă de stocare mutabil? Cum pot fi folosite?

La fel ca și numele său, specificatorul de clasă de stocare mutabil este utilizat numai pe un membru de date de clasă pentru a-l face modificabil, chiar dacă membrul face parte dintr-un obiect declarat ca const. Membrii statici sau const sau de referință nu pot folosi specificatorul mutabil. Când declarăm o funcție ca const, acest pointer transmis funcției devine const.

44. Definiți variabila sfera blocului.

Deci domeniul de aplicare al unei variabile este o regiune în care o variabilă este accesibilă. Există două regiuni de aplicare, A globală și bloc sau local.

O variabilă de domeniu de bloc este cunoscută și ca variabilă de domeniu local. O variabilă care este definită în interiorul unei funcții (cum ar fi main) sau în interiorul unui bloc (cum ar fi bucle și blocuri if) este o variabilă locală. Poate fi folosit NUMAI în interiorul acelei funcții/bloc anume în care este declarat. o variabilă de tip bloc nu va fi disponibilă în afara blocului chiar dacă blocul se află în interiorul unei funcții.

Pentru mai multe informații, consultați Domeniul de aplicare al unei variabile

45. Care este funcția cuvântului cheie Auto?

Cuvântul cheie auto poate fi folosit pentru a declara o variabilă cu un tip complex într-un mod simplu. Puteți folosi auto pentru a declara o variabilă dacă fraza de inițializare conține șabloane, pointeri către funcții, referințe la membri etc. Cu capabilitățile de inferență de tip, putem petrece mai puțin timp pentru a scrie lucruri pe care compilatorul le știe deja. Deoarece toate tipurile sunt deduse doar în faza de compilare, timpul de compilare crește ușor, dar nu afectează timpul de execuție al programului.

Pentru mai multe informații, consultați Mașini în C++

46. ​​Definiți spațiul de nume în C++.

Spațiile de nume ne permit să organizăm elementele numite care altfel ar avea un domeniu de aplicare global în domenii mai mici, permițându-ne să le oferim un domeniu de aplicare al spațiului de nume. Acest lucru permite ca părțile programului să fie organizate în domenii logice distincte cu nume. Spațiul de nume oferă un loc pentru a defini sau declara identificatori, cum ar fi variabile, metode și clase.

Sau am putea spune că Un spațiu de nume este o zonă declarativă care oferă identificatorilor (nume de tipuri, funcții, variabile și așa mai departe) din cadrul acestuia un domeniu. Spațiile de nume sunt folosite pentru a aranja codul în categorii logice și pentru a evita ciocnirile de nume, ceea ce se poate întâmpla atunci când aveți multe biblioteci în baza de cod.

Pentru mai multe informații, consultați Spațiul de nume în C++

47. Când este folosit tipul de returnare void()?

Cuvântul cheie void, atunci când este utilizat ca tip de returnare a funcției, indică faptul că funcția nu returnează o valoare. Când este folosit ca listă de parametri pentru o funcție, void indică faptul că funcția nu acceptă parametri. Funcțiile care nu returnează valori sunt cunoscute și ca funcții void. Sunt numite nule, deoarece nu sunt concepute pentru a returna nimic. Adevărat, dar doar parțial. Nu putem returna valori din funcțiile void, dar cu siguranță putem returna ceva. Deși funcțiile void nu au un tip de returnare, ele pot returna valori.

cum să știi dacă cineva te-a blocat pe Android

Pentru mai multe informații, consultați Tip de returnare nul .

48. Care este diferența dintre copierea superficială și copierea adâncă?

Copie superficială

Deep Copy

În Shallow copy, o copie a obiectului original este stocată și numai adresa de referință este în sfârșit copiată. În termeni simpli, copierea superficială se dublează cât mai puțin posibilÎn Deep copy, copia obiectului original și copiile repetitive sunt ambele stocate. În termeni simpli, Deep copy duplică totul
O copie superficială a unei colecții este o copie a structurii colecției, nu a elementelor. Cu o copie superficială, două colecții au acum elemente individuale.O copie profundă a unei colecții este două colecții cu toate elementele din colecția originală duplicate.
O copie superficială este mai rapidăCopierea profundă este comparativ mai lentă.

Pentru mai multe informații, consultați Copie superficială VS Copie profundă

49. Putem apela o funcție virtuală de la un constructor?

Da, putem apela o funcție virtuală de la un constructor. Dar poate arunca o excepție de suprascriere.

50. Ce sunt indicatorii de gol?

La fel ca și numele său, un pointer nu este un pointer care nu este asociat cu nimic sau cu niciun tip de date. Cu toate acestea, un pointer void poate deține valoarea adresei de orice tip și poate fi convertit de la un tip de date la altul.

Pentru mai multe informații se referă la Void Pointer în C++

Întrebare bonus:

Ce este ' acest ‘ pointer în C++?

acest pointerul permite fiecărui obiect să aibă acces la propria sa adresă printr-un pointer esențial. Toate funcțiile membrilor iau acest pointer ca argument implicit. acest indicator poate fi folosit pentru a se referi la obiectul apelant dintr-o funcție membru.

  • acest pointerul este folosit pentru a trece un obiect ca parametru unei alte metode.
  • Fiecare obiect primește propria copie a membrului de date.
  • acest pointerul este folosit pentru a declara indexatorii.

Pentru mai multe informații, consultați acest pointer în C++