logo

C++ interviewspørgsmål og svar (2024)

C++ – det must-kendte og alle tiders foretrukne programmeringssprog for kodere. Den er stadig aktuel, som den var i midten af ​​80'erne. Som et alment formål og objektorienteret programmeringssprog anvendes i vid udstrækning, for det meste hver gang under kodning. Som følge heraf kræver nogle jobroller, at personer er flydende i C++. Det udnyttes af top IT-virksomheder som f.eks Evernote, LinkedIn, Microsoft, Opera, NASA , og Meta på grund af dens pålidelighed, ydeevne og brede vifte af indstillinger, som den kan bruges i. Så for at komme ind i disse virksomheder skal du være grundig i disse top 50 C++ interviewspørgsmål hvilket kan få dig til at virke som en ekspert over for rekrutterere.

Top 50 C++-interviewspørgsmål for nybegyndere og erfarne (2022)

For at gøre dig klar til samtale, har vi bragt Top 50 C++ interviewspørgsmål til begynder, øvet og øvet som du helt sikkert skal igennem for at få dig selv placeret i top MNC'er.

C++ interviewspørgsmål til nybegyndere

1. Hvad er C++? Hvad er fordelene ved C++?

C++ er et objektorienteret programmeringssprog, der blev introduceret for at overvinde de jurisdiktioner, hvor C manglede. Med objektorienteret mener vi, at det arbejder med begrebet polymorfi , arv , abstraktion , indkapsling , objekt og klasse .



Fordele ved C++ :

  1. C++ er et OOPs sprog, der betyder, at data betragtes som objekter.
  2. C++ er et multi-paradigme sprog; Enkelt sagt betyder det, at vi kan programmere programmets logik, struktur og procedure.
  3. Hukommelsesstyring er en nøglefunktion i C++, da den muliggør dynamisk hukommelsesallokering
  4. Det er et programmeringssprog på mellemniveau, hvilket betyder, at det kan udvikle spil, desktop-applikationer, drivere og kerner

For at læse mere, se artiklen - Hvad er fordelene ved C++?

2. Hvilke forskellige datatyper findes i C++?

datatyper i C++

Forskellige typer af datatyper i C++

For mere information, se ' std' er også kendt som Standard, eller det kan fortolkes som et navneområde. Kommandoen bruger navneområde std informerer compileren om at tilføje alt under std navneområde og indprente dem i globalt navneområde . Al denne indskærpelse af globale navnerum gavner os at bruge cout og spise uden at bruge std::_operatør_.

For mere information, se navneområde og std .

4. Hvad er referencer i C++?

Når en variabel beskrives som en reference, bliver den et alias for den allerede eksisterende variabel. Enkelt sagt er en refereret variabel en anden navngivet variabel af en eksisterende variabel, idet man husker på, at ændringer foretaget i referencevariablen vil blive afspejlet i den allerede eksisterende variabel. En referencevariabel indledes med a '&' symbol.

Syntaks:

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

For mere information, se referencer i C++

5. Hvad mener du med Call by Value og Call by Reference?

I dette programmeringssprog for at kalde en funktion har vi 2 metoder: Ring efter værdi og Ring efter reference

Ring efter værdi

Ring efter reference

En kopi af en variabel sendes.En variabel i sig selv er bestået fundamentalt.
Kaldning af en funktion ved at sende værdierne ved at kopiere variabler.Kaldning af en funktion ved at sende adressen på den beståede variabel.
Ændringerne i funktionen afspejles aldrig uden for funktionen på variablen. Kort sagt ændres den oprindelige værdi aldrig i Call by Value.Ændringerne i funktionerne kan ses uden for funktionen på den beståede funktion. Kort sagt ændres den oprindelige værdi i Call ved reference.
Beståede faktiske og formelle parametre gemmes på forskellige hukommelsesplaceringer. Derfor gør Call by Value lidt hukommelse utilstrækkeligBeståede faktiske og formelle parametre gemmes på samme hukommelsesplads. Derfor gør Call by Reference lidt mere hukommelseseffektiv.

For information, se forskellen mellem call by value og call by reference

6. Definer token i C++

Et token er det mindste individuelle element i et program, der forstås af en compiler. Et token omfatter følgende:

  1. Nøgleord – Det indeholder en særlig betydning for compileren
  2. Identifikatorer – Det har en unik værdi/identitet
  3. Konstanter - Det ændrer aldrig deres værdi gennem hele programmet
  4. Strenge – Det indeholder den homogene rækkefølge af data
  5. Særlige symboler – De har en særlig betydning og kan ikke bruges til andre formål; f.eks: [] () {}, ; * = #
  6. Operatører – Hvem udfører operationer på operanden

For mere information, se Tokens i C++

7. Hvad er forskellen mellem C og C++?

C

C++

Det er et proceduremæssigt programmeringssprog. Med enkle ord, det understøtter ikke klasser og objekterDet er en blanding af både proceduremæssige og objektorienterede programmeringssprog. Med enkle ord, det understøtter klasser og objekter.
Det understøtter ikke nogen OOPs-koncepter som polymorfi, dataabstraktion, indkapsling, klasser og objekter.Det understøtter alle databegreber
Den understøtter ikke funktions- og operatøroverbelastningDen understøtter henholdsvis funktions- og operatøroverbelastning
Det er et funktionsdrevet sprogDet er et objektdrevet sprog

For mere information, se Forskellen mellem C og C++

8. Hvad er forskellen mellem struktur og klasse?

Struktur

Klasse

Medlemmer af strukturen er altid som standard offentlig tilstandMedlemmer af klassen kan være i private, beskyttede og offentlige tilstande.
Strukturer er af værditypen. De har kun værdi i hukommelsen.Klasser er af referencetype. Den har en reference til et objekt i hukommelsen.
Hukommelsen i strukturer er lagret som stakkeHukommelsen i klasserne er gemt som dynger.

For mere information, se Forskellen mellem struktur og klasse.

9. Hvad er forskellen mellem reference og pointer?

Reference

streng i java-metoder

Pointer

Værdien af ​​en reference kan ikke gentildelesVærdien af ​​en markør kan omtildeles
Det kan aldrig holde en nul værdi, da den har brug for en eksisterende værdi for at blive et alias forDen kan holde eller pege på en nul værdi og betegnes som en nullptr eller nul pointer
Det kan ikke fungere med arraysDet kan arbejde med arrays
For at få adgang til medlemmerne af klassen/struct bruger den en ' . 'For at få adgang til medlemmerne af klassen/struct bruger den en ' -> '
Hukommelsesplaceringen for reference kan nemt tilgås, eller den kan bruges direkteHukommelsesplaceringen af ​​en pointer kan ikke tilgås let, da vi skal bruge en dereference ' * '

For mere information, se Forskellen mellem reference og pointer

10. Hvad er forskellen mellem funktionsoverbelastning og operatøroverbelastning?

Funktion Overbelastning

Operatør overbelastning

Det er dybest set at definere en funktion på adskillige måder, så der er mange måder at kalde den på, eller i enkle vendinger har du flere versioner af den samme funktionDet er dybest set at give øvelse i at give en speciel betydning til den eksisterende betydning af en operatør eller i enkle vendinger at omdefinere den på forhånd omdefinerede betydning
Parameteriserede funktioner er et godt eksempel på funktionsoverbelastning, da du blot ved at ændre argumentet eller parameteren for en funktion gør den nyttig til forskellige formålPolymorfi er et godt eksempel på en operatør overbelastning, da et objekt af allokeringer klasse kan bruges og kaldes af forskellige klasser til forskellige formål

Eksempel på funktionsoverbelastning:

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

Eksempel på operatøroverbelastning:

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

For mere information, se Operatør overbelastning og Funktion Overbelastning

11. Hvad er forskellen mellem et array og en liste?

Arrays

Lister

Array er sammenhængende hukommelsesplaceringer af homogene datatyper gemt på en fast placering eller størrelse.Lister er klassiske individuelle elementer, der er forbundet eller forbundet med hinanden ved hjælp af pointere og ikke har en fast størrelse.
Arrays er statiske i naturen.Lister er dynamiske
Bruger mindre hukommelse end sammenkædede lister.Bruger mere hukommelse, da den skal gemme værdien og markørens hukommelsesplacering

For mere information, se Arrays vs List

12. Hvad er forskellen mellem en while loop og en do-while loop?

Mens Loop

gør-mens-løkke

Mens loop kaldes også en indgangskontrolleret loopDo-while-løkken kaldes en udgangskontrolløkke
Hvis betingelsen ikke er opfyldt, vil sætningerne inde i løkken ikke udføresSelvom betingelsen ikke er opfyldt, vil sætningerne inde i løkken udføres i mindst én gang

Eksempel of a while loop:

mens (tilstand)

liste som array

{erklæringer, der skal udføres;};

Eksempel af en do-while loop:

gør {

erklæringer, der skal udføres;

} while(betingelse eller udtryk);

For mere information, se Forskellen mellem while og do-while loop

13. Diskuter forskellen mellem præfiks og postfix?

præfiks

postfix

Det betyder simpelthen at sætte operatøren før operandenDet betyder simpelthen at sætte operatøren efter operanden
Det udfører sig selv før '; ' Det udfører sig selv efter '; '
Associativitet af præfiks ++ er højre mod venstreAssociativitet af postfix ++ er venstre mod højre

For mere information, se Forskellen mellem præfiks og postfix

14. Hvad er forskellen mellem new og malloc()?

ny

malloc()

new er en operatør, der udfører en operationmalloc er en funktion, der returnerer og accepterer værdier
nye kalder konstruktørernemalloc kan ikke kalde en konstruktør
new er hurtigere end malloc, da det er en operatørmalloc er langsommere end ny, da det er en funktion
new returnerer den nøjagtige datatypemalloc returnerer ugyldig*

For mere information, se Forskellen mellem new og malloc()

15. Hvad er forskellen mellem virtuelle funktioner og rene virtuelle funktioner?

Virtuel funktion

Ren virtuel funktion

En virtuel funktion er en medlemsfunktion af en basisklasse, der kan omdefineres i en anden afledt klasse.En ren virtuel funktion er en medlemsfunktion af en basisklasse, der kun er deklareret i en basisklasse og defineret i en afledt klasse for at forhindre, at den bliver en abstrakt klasse.
En virtuel funktion har sin definition i sin respektive basisklasse.Der er ingen definition i Pure Virtual Function og initialiseres med en ren specifier (= 0).
Basisklassen har en virtuel funktion, der kan repræsenteres eller instances; Med enkle ord kan dens objekt laves.En basisklasse, der har ren virtuel funktion, bliver abstrakt, som ikke kan repræsenteres eller instanseres; Med enkle ord betyder det, at dets objekt ikke kan laves.

For mere information, se Forskellen mellem virtuelle funktioner og rene virtuelle funktioner

16. Hvad er klasser og objekter i C++?

En klasse er en brugerdefineret datatype, hvor alle medlemsfunktioner og datamedlemmer er skræddersyet efter krav og krav, derudover kan disse alle tilgås ved hjælp af en objekt . For at erklære en brugerdefineret datatype bruger vi et nøgleord klasse.

Et objekt er en instans af en klasse og en enhed med værdi og tilstand; Enkelt sagt bruges det som en katalysator eller til at repræsentere et klassemedlem. Det kan indeholde forskellige parametre eller ingen.

Bemærk: En klasse er en blueprint, der definerer funktioner, der bruges af et objekt.

For mere information henvises til denne Hvad er klasser og objekter

17. Hvad er funktionstilsidesættelse?

Når en funktion med samme navn, samme argumenter eller parametre og samme returtype, der allerede er til stede/erklæret i basisklassen, bruges i en afledt klasse, kaldes Funktionstilsidesættelse. Det er et eksempel på Runtime Polymorphism eller Late Binding, hvilket betyder, at den tilsidesatte funktion vil blive udført på køretidspunktet for udførelsen.

For mere information, se Funktionstilsidesættelse i C++

18. Hvad er de forskellige OOPs-koncepter i C++?

  • Klasser : Det er en brugerdefineret datatype
  • Objekter : Det er et eksempel på en klasse
  • Abstraktion: Det er en teknik til kun at vise nødvendige detaljer
  • Indkapsling: Indpakning af data i en enkelt enhed
  • Arv: En klasses evne til at udlede egenskaber og karakteristika fra en anden klasse
  • Polymorfi: Polymorfi er kendt som mange former for det samme

For mere information, se Forskellige OOPs koncepter i C++

19. Forklar arv

En klasses evne eller evne til at udlede egenskaber og karakteristika fra en anden klasse er kendt som arv. Enkelt sagt er det et system eller en teknik til at genbruge og udvide eksisterende klasser uden at ændre dem.

For mere information, se Arv

20. Hvornår skal vi bruge multipel arv?

Flere nedarvninger betyder, at en afledt klasse kan arve to eller flere basis-/overordnede klasser. Det er nyttigt, når en afledt klasse skal kombinere adskillige attributter/kontrakter og arve nogle af eller hele implementeringen fra disse attributter/kontrakter. For at tage et eksempel fra det virkelige liv, overvej dine forældre, hvor forælder A er din FAR Forælder B er din MOR og Barn C er dig.

flere arv

Flere arv

For mere information, se Multipel arv .

21. Hvad er virtuel arv?

Virtuel nedarvning er en teknik, der sikrer, at kun én kopi af en basisklasses medlemsvariable nedarves af klasser, der er afledt af børnebørn. Eller forenklet sagt, virtuel arv bruges, når vi har at gøre med en situation med flere arv, men ønsker at forhindre, at flere forekomster af samme klasse optræder i arvehierarkiet.

22. Hvad er polymorfi i C++?

Polymorfi er kendt som mange former for det samme. Enkelt sagt kan vi sige, at polymorfisme er evnen til at vise en medlemsfunktion i flere former afhængigt af den type objekt, der kalder dem.

Med andre ord kan vi også sige, at en mand kan være en ansat for nogen, en søn af nogen, en far til nogen og en mand til nogen; det er sådan polymorfi kan projiceres i det virkelige liv.

Der er 2 typer polymorfi:

  1. Kompiler tidspolymorfi
    • Funktion Overbelastning
    • Operatør overbelastning
  2. Run Time Polymorphism
    • Funktion tilsidesætte
    • Virtuel funktion

For at vide mere om det, se Polymorfi

23. Hvad er de forskellige typer polymorfi i C++?

Der er 2 typer polymorfi

formatere en dato i java

Kompiler tidspolymorfi eller statisk binding

Denne type polymorfi opnås i løbet af programmets kompileringstid, hvilket resulterer i, at det gør en smule hurtigere end Run time. Arv er heller ikke involveret i det. Den består af 2 yderligere teknikker :

Funktionsoverbelastning: Når der er flere funktioner med samme navn, men forskellige parametre, er dette kendt som funktionsoverbelastning.

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


Operatør overbelastning: Det er dybest set at give øvelse i at give en speciel betydning til den eksisterende betydning af en operatør eller i enkle vendinger at omdefinere den på forhånd omdefinerede betydning

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

Run-Time Polymorphism eller Sen binding

Run-time polymorfisme finder sted, når funktioner påkaldes under køretiden.

Funktionstilsidesættelse: Funktionstilsidesættelse sker, når en basisklassemedlemsfunktion omdefineres i en afledt klasse med de samme argumenter og returtype.

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

Produktion:

Function of derived class>

For mere information, se Forskellige typer polymorfi

24. Sammenlign compile-time polymorphism og Runtime polymorphism

Kompileringstidspolymorfi

Runtime polymorfisme

Det kaldes også statisk binding og tidlig binding.Det kaldes også Dynamisk binding og Sen binding.
Det er hurtigt, fordi udførelse er kendt tidligt på kompileringstidspunktet.Det er langsomt sammenlignet med kompileringstid, fordi udførelse er kendt under kørsel.
Det opnås ved funktionsoverbelastning og operatøroverbelastning.Det opnås ved virtuelle funktioner og funktionstilsidesættelse.

For mere information, se Kompileringstidspolymorfi og Runtime-polymorfi

25. Forklar konstruktøren i C++.

En konstruktør er en speciel type medlemsfunktion af en klasse, hvis navn er det samme som navnet på den klasse, af hvem den påkaldes og initialiserer værdi til objektet i en klasse.

Der er 3 typer konstruktører:

A. Standard konstruktør: Det er den mest grundlæggende type konstruktør, som ikke accepterer argumenter eller parametre. Selvom det ikke kaldes, kalder compileren det automatisk, når et objekt oprettes.

Eksempel:

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


B. Parametriseret konstruktør: Det er en type konstruktør, der accepterer argumenter eller parametre. Det skal kaldes eksplicit ved at sende værdier i argumenterne, da disse argumenter hjælper med at initialisere et objekt, når det oprettes. Den har også samme navn som klassens.

Det bruges også til at overbelaste konstruktører.

Eksempel:

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

Produktion

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

C. Kopikonstruktør: En kopikonstruktør er en medlemsfunktion, der initialiserer et objekt ved hjælp af et andet objekt af samme klasse. Copy-konstruktøren tager også en reference til et objekt af samme klasse som et argument.

Eksempel:

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


For mere information, se Konstruktører

26. Hvad er destruktorer i C++?

Destruktorer er medlemmer af funktioner i en klasse, der sletter et objekt, når et objekt i klassen går uden for scope. Destruktorer har samme navn som klassen med et tilde (~)-tegn foran. Destruktorer følger også en ned til toppen tilgang, i modsætning til konstruktører, der følger en top-to-down.

Syntaks:

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

For mere information, se Destroyer .

27. Hvad er en virtuel destruktor?

Når forekomster eller objekter af en afledt klasse ødelægges ved hjælp af et basisklassepointerobjekt, aktiveres en virtuel destruktor for at frigøre hukommelsesplads tildelt af det afledte klasseobjekt eller forekomst.

Virtual destructor garanterer, at først den afledte klasses destructor kaldes. Derefter kaldes basisklassens destruktor for at frigive pladsen optaget af begge destruktorer i arveklassen, hvilket redder os fra hukommelseslækagen. Det anbefales at gøre din destruktor virtuel, når din klasse er polymorf.

For mere information, se Virtual Destroyer

webdriver

28. Er destructor overbelastning mulig? Hvis ja, så forklar og hvis nej hvorfor så?

Det enkle svar er INGEN vi kan ikke overbelaste en destruktor. Det er obligatorisk kun at destruere pr. klasse i C++. For også at nævne, Destructor tager hverken argumenter, eller de har en parameter, der kan hjælpe med at overbelaste.

C++ Interviewspørgsmål – Mellemniveau

29. Hvilke operationer er tilladt på pointere?

Pointere er de variable, der bruges til at gemme adresseplaceringen af ​​en anden variabel. Operationer, der er tilladt for en pointer, er:

  1. Forøgelse/reduktion af en markør
  2. Addition og subtraktion af heltal til en pointer
  3. Sammenligning af pointere af samme type

30. Hvad er formålet med slette operatør?

Slet-operatoren bruges til at slette/fjerne alle karakteristika/egenskaber fra et objekt ved at deallokere dets hukommelse; desuden returnerer det sandt eller falsk til sidst. Enkelt sagt ødelægger eller deallokerer det array- og ikke-array(pointer)-objekter, som er skabt af nye udtryk.

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

For mere information, se Slet operatør

31. Hvordan er slet [] forskellig fra slet?

slet[]

slette

Det bruges til at slette et helt arrayDen bruges til kun at slette en enkelt markør
Det bruges til at slette objekter af ny[]; Med dette kan vi sige det slet[] bruges til at slette en række objekterDet bruges til at slette objekter af ny; Med dette kan vi sige det slette bruges til at slette et enkelt objekt
Den kan kalde så mange destruktorer, den vilDen kan kun kalde destruktoren af ​​en klasse én gang

32. Hvad ved du om venneklasse og vennefunktion?

En venneklasse er en klasse, der kan få adgang til både de beskyttede og private variabler i de klasser, hvor den er erklæret som en ven.

Eksempel på venneklasse:

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


En vennefunktion er en funktion, der bruges til at få adgang til private, beskyttede og offentlige datamedlemmer eller medlemsfunktioner i andre klasser. Det er deklareret med et ven-søgeord. Fordelen ved en vennefunktion er, at den ikke er bundet til klassens omfang, og når den først er deklareret i en klasse, kan den desuden ikke kaldes af et objekt i klassen; derfor kan den kaldes af andre funktioner. I betragtning af alle de nævnte punkter kan vi sige, at en venfunktion er en global funktion .

Eksempel på vennefunktion:

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


For mere information, se vennefunktion og venneklasse

33. Hvad er en overløbsfejl?

Overløbsfejl opstår, når tallet er for stort til, at datatypen kan håndtere. Enkelt sagt er det en type fejl, der er gyldig for det definerede, men overskrider brugt det definerede område, hvor det skal falde sammen/ligge.

For eksempel er området for int datatype –2.147.483.648 til 2.147.483.647 og hvis vi erklærer en størrelsesvariabel 2.247.483.648 det vil generere en overløbsfejl.

34. Hvad gør Scope Resolution-operatøren?

En scope resolution operator er angivet med en ' :: ’ symbol. Ligesom sit navn løser denne operatør barrieren for omfanget i et program. En scope resolution operator bruges til at henvise til en medlemsfunktion eller en global variabel uden for deres scope, hvortil den også kan få adgang til den skjulte variabel eller funktion i et program.

Scope Resolution bruges til adskillige mængder af opgaver:

  1. For at få adgang til en global variabel, når der er en lokal variabel med samme navn
  2. At definere funktionen uden for klassen
  3. Ved flere arv
  4. Til navneområde

For mere information, se Scope resolution operator

35. Hvad er C++-adgangsmodifikatorerne?

Den adgangsbegrænsning, der er angivet for klassemedlemmerne (uanset om det er medlemsfunktion eller datamedlem) er kendt som adgangsmodifikatorer/specifikationer.

Adgangsmodifikatorer er af 3 typer:

  1. Privat – Den kan hverken tilgås eller ses uden for klassen
  2. Beskyttet – Den kan tilgås, hvis og kun hvis accessoren er den afledte klasse
  3. Offentlig - Den kan tilgås eller ses uden for klassen

For mere information, se Adgangsmodifikatorer

36. Kan du kompilere et program uden hovedfunktionen?

Ja, det er absolut muligt at kompilere et program uden en main(). Brug for eksempel makroer, der definerer det primære

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

For mere information, se Kan du kompilere et program uden hovedfunktionen

37. Hvad er STL?

STL er kendt som Standard Template Library, det er et bibliotek, der giver 4 komponenter som container, algoritmer og iteratorer.

C++ STL

For mere information, se STL i C++

38. Definer inline funktion. Kan vi have en rekursiv inline-funktion i C++?

En inline-funktion er en form for anmodning, ikke en ordre til en compiler, som resulterer i inlining af vores funktion til hovedfunktionskroppen. En inline-funktion kan blive overhead, hvis udførelsestiden for funktionen er mindre end skifttiden fra den kaldende funktion til den kaldede funktion. Brug nøgleordet for at lave en funktion inline inline før og definere funktionen, før der foretages opkald til funktionen.

Inline funktion

Inline funktion Forklaring

Syntaks:

inline data_type function_name() { Body; }>

Svaret er Ingen; Det kan ikke være rekursivt.

En inline-funktion kan ikke være rekursiv, fordi koden i tilfælde af en inline-funktion blot placeres i den position, hvorfra den kaldes, og ikke vedligeholder et stykke information på stakken, som er nødvendig for rekursion.

Plus, hvis du skriver et inline nøgleord foran en rekursiv funktion, vil compileren automatisk ignorere det, fordi det inline kun tages som et forslag af compileren.

For mere information, se Inline funktion

39. Hvad er en abstrakt klasse, og hvornår bruger du den?

En abstrakt klasse er en klasse, der er specifikt designet til at blive brugt som en basisklasse. En abstrakt klasse indeholder mindst én ren virtuel funktion. Du erklærer en ren virtuel funktion ved at bruge en ren specifikation(= 0) i erklæringen af ​​en virtuel medlemsfunktion i klasseerklæringen

Du kan ikke bruge en abstrakt klasse som en parametertype, en funktionsreturtype eller typen af ​​en eksplicit konvertering, og du kan heller ikke erklære et objekt af en abstrakt klasse. Det kan dog bruges til at erklære pointere og referencer til en abstrakt klasse.

En abstrakt klasse bruges, hvis du ønsker at give en fælles, implementeret funktionalitet blandt alle implementeringer af komponenten. Abstrakte klasser giver dig mulighed for delvist at implementere din klasse, hvorimod grænseflader ikke ville have nogen implementering for nogen som helst medlemmer. Med enkle ord passer abstrakte klasser godt, hvis du ønsker at give dine børn implementeringsdetaljer, men ikke ønsker at tillade, at en forekomst af din klasse instansieres direkte.

40. Hvad er de statiske datamedlemmer og statiske medlemsfunktioner?

Det statiske datamedlem af en klasse er et normalt datamedlem, men foranstillet med et statisk nøgleord. Det udføres før main() i et program og initialiseres til 0, når det første objekt i klassen er oprettet. Det er kun synligt for en defineret klasse, men dets omfang er for livet.

Syntaks:

  static Data_Type Data_Member;>

Den statiske medlemsfunktion er den medlemsfunktion, der bruges til at få adgang til andre statiske datamedlemmer eller andre statiske medlemsfunktioner. Det er også defineret med et statisk nøgleord. Vi kan få adgang til den statiske medlemsfunktion ved hjælp af klassenavnet eller klasseobjekter.

Syntaks:

classname::function name(parameter);>

C++ Interviewspørgsmål – Ekspertniveau

41. Hvad er hovedanvendelsen af ​​søgeordet Volatile?

Ligesom dets navn kan tingene ændre sig pludseligt og uventet; Så det bruges til at informere compileren om, at værdien kan ændre sig når som helst. Det flygtige nøgleord forhindrer også compileren i at udføre optimering af koden. Det var beregnet til at blive brugt ved grænseflader med hukommelseskortet hardware, signalhandlere og maskinkodeinstruktion.

For mere information henvises til denne Flygtig

42. Definer lagerklasse i C++ og nævn nogle

Lagerklasse bruges til at definere funktionerne (levetid og synlighed) af en variabel eller funktion. Disse funktioner hjælper normalt med at spore eksistensen af ​​en variabel i løbet af et program.

Syntaks:

storage_class var_data_type var_name;>

Nogle typer opbevaringsklasser:

Eksempler på opbevaringsklasse

For mere information, se Opbevaringsklasse

43. Hvad er en foranderlig lagerklassespecifikator? Hvordan kan de bruges?

Ligesom dens navn, bruges den mutable storage-klassespecifikator kun på et klassedatamedlem for at gøre det modificerbart, selvom medlemmet er en del af et objekt, der er erklæret som const. Statiske eller const- eller referencemedlemmer kan ikke bruge den mutable specifikation. Når vi erklærer en funktion som const, bliver denne pointer, der sendes til funktionen, const.

44. Definer Blok-omfang-variablen.

Så omfanget af en variabel er et område, hvor en variabel er tilgængelig. Der er to områdeområder, A global og blok eller lokal.

En blokomfangsvariabel er også kendt som en lokal omfangsvariabel. En variabel, der er defineret inde i en funktion (som hoved) eller inde i en blok (som sløjfer og hvis blokke) er en lokal variabel. Den kan KUN bruges i den pågældende funktion/blok, hvor den er deklareret. en variabel med blokomfang vil ikke være tilgængelig uden for blokken, selvom blokken er inde i en funktion.

For mere information, se Omfanget af en variabel

45. Hvad er funktionen af ​​søgeordet Auto?

Auto nøgleordet kan bruges til at erklære en variabel med en kompleks type på en ligetil måde. Du kan bruge auto til at erklære en variabel, hvis initialiseringssætningen indeholder skabeloner, pointere til funktioner, referencer til medlemmer osv. Med type-inferensfunktioner kan vi bruge mindre tid på at skulle skrive ting ud, som compileren allerede ved. Da alle typerne kun udledes i kompileringsfasen, øges tiden til kompilering en smule, men det påvirker ikke programmets køretid.

For mere information, se Biler i C++

46. ​​Definer navneområde i C++.

Navneområder gør det muligt for os at organisere navngivne elementer, der ellers ville have globalt omfang, i mindre omfang, hvilket giver os mulighed for at give dem navneområde. Dette tillader programdele at blive organiseret i distinkte logiske områder med navne. Navnerummet giver et sted til at definere eller erklære identifikatorer såsom variabler, metoder og klasser.

Eller vi kan sige, at et navneområde er en deklarativ zone, der giver identifikatorerne (navne på typer, funktioner, variable osv.) inden for det et omfang. Navneområder bruges til at arrangere kode i logiske kategorier og for at undgå navnesammenstød, hvilket kan ske, når du har mange biblioteker i din kodebase.

streng som en matrix

For mere information, se Navneområde i C++

47. Hvornår bruges returtypen void()?

Nøgleordet void, når det bruges som en funktionsreturtype, angiver, at funktionen ikke returnerer en værdi. Når det bruges som en parameterliste for en funktion, angiver void, at funktionen ikke tager nogen parametre. Ikke-værdireturende funktioner er også kendt som ugyldige funktioner. De kaldes ugyldige, da de ikke er designet til at returnere noget. Sandt, men kun delvist. Vi kan ikke returnere værdier fra ugyldige funktioner, men vi kan bestemt returnere noget. Selvom ugyldige funktioner ikke har nogen returtype, kan de returnere værdier.

For mere information, se Ugyldig returtype .

48. Hvad er forskellen mellem lav kopi og dyb kopi?

Overfladisk kopi

Deep Copy

I Shallow copy gemmes en kopi af det originale objekt, og kun referenceadressen kopieres til sidst. Enkelt sagt dubletter Shallow copy så lidt som muligtI dyb kopi gemmes både kopien af ​​det originale objekt og de gentagne kopier. Enkelt sagt dublerer Deep copy alt
En overfladisk kopi af en samling er en kopi af samlingsstrukturen, ikke elementerne. Med en overfladisk kopi deler to samlinger nu individuelle elementer.En dyb kopi af en samling er to samlinger med alle elementerne i den originale samling duplikeret.
En overfladisk kopi er hurtigereDyb kopi er forholdsvis langsommere.

For mere information, se Shallow copy VS Deep Copy

49. Kan vi kalde en virtuel funktion fra en konstruktør?

Ja, vi kan kalde en virtuel funktion fra en konstruktør. Men det kan kaste en undtagelse af tilsidesættelse.

50. Hvad er void pointers?

Ligesom dens navn er en void pointer en pointer, der ikke er forbundet med noget eller med nogen datatype. Ikke desto mindre kan en void pointer holde adresseværdien af ​​enhver type og kan konverteres fra en datatype til en anden.

For mere henvises til Void Pointer i C++

Bonus spørgsmål:

Hvad er ' det her ' pointer i C++?

det her pointer gør det muligt for hvert objekt at få adgang til sin egen adresse gennem en vigtig pointer. Alle medlemsfunktioner tager det her pointer som et implicit argument. det her pointer kan bruges til at henvise til det kaldende objekt i en medlemsfunktion.

  • det her pointer bruges til at sende et objekt som en parameter til en anden metode.
  • Hvert objekt får sin egen kopi af datamedlemmet.
  • det her pointer bruges til at erklære indeksere.

For mere information, se det her pointer i C++