top 70 c interview questions
Vanligaste grundläggande och avancerade C ++ intervjufrågor med kodexempel för nybörjarkandidater såväl som erfarna proffs:
Den här detaljerade artikeln kommer säkert att vara ett bokmärke för dem som förbereder sig för en C ++ - intervju.
Nästan alla viktiga ämnen i C ++ behandlas här tillsammans med några grundläggande frågor om avancerade ämnen som Standardmallbibliotek (STL) etc.
Denna uppsättning C ++ -kodningsfrågor hjälper dig att möta alla C ++ -intervjuer med säkerhet och rensa den framgångsrikt vid första försöket.
Vad du kommer att lära dig:
- C ++ intervjufrågor med kodexempel
C ++ intervjufrågor med kodexempel
Nedan listas de mest populära C ++ - programmeringsintervjufrågorna som besvaras av en C ++ - expert.
Läs också => Top C-programmeringsintervjuer
Grundläggande C ++
Struktur för C ++ - programmet
F # 1) Vad är den grundläggande strukturen för ett C ++ - program?
Svar: Grundstrukturen för ett C ++ - program visas nedan:
#include int main() { cout<<”Hello,World!”; return 0; }
Den första raden som börjar med “ # ' är en förbehandlingsdirektivet . I det här fallet använder vi omfatta som ett direktiv som säger att kompilatorn ska inkludera en rubrik medan ” iostream.h ”Som kommer att användas för grundläggande in- / utgång senare i programmet.
Nästa rad är 'huvud' -funktionen som returnerar ett heltal. Huvudfunktionen är startpunkten för körning för alla C ++ - program. Oavsett dess position i källkodsfilen körs alltid innehållet i huvudfunktionen först av C ++ - kompilatorn.
I nästa rad kan vi se öppna lockiga hakparenteser som indikerar början på ett kodblock. Efter detta ser vi programmeringsinstruktionen eller kodraden som använder räkningen som är standardutgångsströmmen (dess definition finns i iostream.h).
Denna utgångsström tar en rad tecken och skriver ut den till en standardutmatningsenhet. I det här fallet är det 'Hello, World!'. Observera att varje C ++ - instruktion slutar med ett semikolon (;), vilket är mycket nödvändigt och att utelämna det kommer att resultera i kompileringsfel.
Innan vi stänger hängslen} ser vi en annan rad 'return 0;'. Detta är återgångspunkten för huvudfunktionen.
Varje C ++ - program kommer att ha en grundläggande struktur som visas ovan med ett förprocessordirektiv, huvudfunktionsdeklaration följt av ett kodblock och sedan en returpunkt till huvudfunktionen som indikerar att programmet har genomförts.
F # 2) Vilka är kommentarerna i C ++?
Svar: Kommentarer i C ++ är helt enkelt en del av källkoden som ignoreras av kompilatorn. De är bara användbara för en programmerare att lägga till en beskrivning eller ytterligare information om sin källkod.
I C ++ finns det två sätt att lägga till kommentarer:
- // kommentar med en rad
- / * blockera kommentar * /
Den första typen kommer att kasta allt efter att kompilatorn stöter på “//”. I den andra typen kasserar kompilatorn allt mellan “/ *” och “* /”.
Variabler, datatyper och konstanter
F # 3) Skillnad mellan deklaration och definition av en variabel.
Svar: Deklarationen av en variabel anger bara datatypen för en variabel och variabelnamnet. Som ett resultat av deklarationen ber vi kompilatorn att reservera platsen för en variabel i minnet enligt den angivna datatypen.
Exempel:
int Result; char c; int a,b,c;
Alla ovanstående är giltiga deklarationer. Observera också att variabelns värde inte bestäms som ett resultat av deklarationen.
Medan en definition är en implementering / instantiering av den deklarerade variabeln där vi binder upp lämpligt värde till den deklarerade variabeln så att länkaren kommer att kunna länka referenser till lämpliga enheter.
Från ovanstående exempel ,
Resultat = 10;
C = 'A';
Dessa är giltiga definitioner.
F # 4) Kommentar om en variabels lokala och globala omfattning.
Svar: Omfattningen av en variabel definieras som omfattningen av programkoden inom vilken variabeln förblir aktiv, dvs. den kan deklareras, definieras eller arbetas med.
Det finns två typer av omfattning i C ++:
- Lokalt omfång: En variabel sägs ha ett lokalt omfång eller är lokal när den deklareras i ett kodblock. Variabeln förblir aktiv endast inom blocket och är inte tillgänglig utanför kodblocket.
- Globalt omfång: En variabel har ett globalt omfång när den är tillgänglig i hela programmet. En global variabel deklareras ovanpå programmet före alla funktionsdefinitioner.
Exempel:
#include Int globalResult=0; //global variable int main() { Int localVar = 10; //local variable. ….. }
F # 5) Vad har företräde när det finns en global variabel och en lokal variabel i programmet med samma namn?
Svar: Närhelst det finns en lokal variabel med samma namn som den för en global variabel, ger kompilatorn företräde till den lokala variabeln.
Exempel:
#include int globalVar = 2; int main() { int globalVar = 5; cout<Utgången från ovanstående kod är 5. Detta beror på att, även om båda variablerna har samma namn, har kompilatorn prioriterat det lokala omfånget.
F # 6) Hur kommer du åt den globala variabeln när det finns en global variabel och en lokal variabel med samma namn?
Svar: När det finns två variabler med samma namn men olika omfattning, dvs. en är en lokal variabel och den andra är en global variabel, kommer kompilatorn att ge företräde åt en lokal variabel.
För att komma åt den globala variabeln använder vi en ” scope resolution operator (: :) ”. Med den här operatören kan vi komma åt värdet på den globala variabeln.
Exempel:
#include int x= 10; int main() { int x= 2; cout<<”Global Variable x = “<<::x; cout<<”
local Variable x= “< Produktion:
Global variabel x = 10
lokal variabel x = 2
F # 7) Hur många sätt finns det att initiera ett int med en Constant?
Svar: Det finns två sätt:
- Det första formatet använder traditionell C-notation.
int-resultat = 10; - Det andra formatet använder konstruktörsnotationen.
int-resultat (10);
Konstanter
F # 8) Vad är en konstant? Förklara med ett exempel.
Svar: En konstant är ett uttryck som har ett fast värde. De kan delas in i heltal, decimal, flytande punkt, tecken eller strängkonstanter beroende på deras datatyp.
Bortsett från decimaltalet stöder C ++ också ytterligare två konstanter, dvs oktala (till bas 8) och hexadecimala (till bas 16) konstanter.
Exempel på konstanter:
- 75 // heltal (decimal)
- 0113 // oktal
- 0x4b // hexadecimal
- 3.142 // flytande punkt
- ‘C’ // karaktärskonstant
- 'Hello, World' // strängkonstant
Notera: När vi måste representera ett enda tecken använder vi enstaka citat och när vi vill definiera en konstant med mer än ett tecken använder vi dubbla citat.
F # 9) Hur definierar / deklarerar du konstanter i C ++?
Svar: I C ++ kan vi definiera våra egna konstanter med hjälp av #definiera förbehandlingsdirektivet.
#define Identifier value
Exempel:
#include #define PI 3.142 int main () { float radius =5, area; area = PI * r * r; cout<<”Area of a Circle = “< Produktion: Cirkelarea = 78,55
Som visas i exemplet ovan, när vi definierar en konstant med #define-direktivet, kan vi använda den i hela programmet och ersätta dess värde.
Vi kan deklarera konstanter i C ++ med hjälp av “ konst ”Nyckelord. Det här sättet liknar det att deklarera en variabel, men med ett const-prefix.
Exempel på att deklarera en konstant
const int pi = 3.142;
const char c = “sth”;
const postnummer = 411014;
I exemplen ovan, när typ av konstant inte specificeras, är C ++ - kompilatorn som standard som heltalstyp.
Operatörer
F # 10) Kommentar tilldelningsoperatör i C ++.
Svar: Tilldelningsoperatör i C ++ används för att tilldela ett värde till en annan variabel.
a = 5;
Denna kodrad tilldelar heltalsvärdet 5 till variabel till .
Delen till vänster om operatorn = är känd som en värde (vänster värde) och höger som rvärde (rätt värde). L värde måste alltid vara en variabel medan höger sida kan vara en konstant, en variabel, resultatet av en operation eller någon kombination av dem.
Uppdragsoperationen sker alltid från höger till vänster och aldrig i omvänd riktning.
En egenskap som C ++ har över de andra programmeringsspråken är att uppdragsoperatören kan användas som rvärde (eller en del av en rvärde ) för ett annat uppdrag.
Exempel:
a = 2 + (b = 5);
är ekvivalent med:
b = 5;
a = 2 + b;
Vilket innebär, först tilldela 5 till variabel b och tilldela sedan till till, värdet två plus resultatet av föregående uttryck av b (det vill säga 5), lämnar till med ett slutvärde på 7 .
Följaktligen gäller följande uttryck också i C ++:
a = b = c = 5;
tilldela 5 variabler till , b och c .
F # 11) Vad är skillnaden mellan lika med (==) och Assignment Operator (=)?
Svar: I C ++, lika med (==) och tilldelningsoperatör (=) är två helt olika operatorer.
Equal to (==) är en jämställdhetsrelationsoperator som utvärderar två uttryck för att se om de är lika och returnerar true om de är lika och falska om de inte är det.
Tilldelningsoperatören (=) används för att tilldela ett värde till en variabel. Därför kan vi ha en komplex uppdragsoperation inom jämställdhetsrelationsoperatören för utvärdering.
F # 12) Vilka är de olika aritmetiska operatörerna i C ++?
Svar: C ++ stöder följande aritmetiska operatorer:
- + tillägg
- - subtraktion
- * multiplikation
- / division
- % -modul
Låt oss demonstrera de olika aritmetiska operatörerna med följande kod.
Exempel:
#include int main () { int a=5, b=3; cout<<”a + b = “< Produktion :
a + b = 8
a - b = 2
a * b = 15
a / b = 2
a% b = 1
Som visas ovan är alla andra operationer enkla och samma som faktiska aritmetiska operationer, förutom moduloperatorn som är helt annorlunda. Modulo-operatören delar upp a och b och resultatet av operationen är resten av divisionen.
F # 13) Vilka är de olika sammansatta tilldelningsoperatörerna i C ++?
Svar: Följande är sammansatta tilldelningsoperatörer i C ++:
+ =, - =, * =, / =,% =, >> =,<<=, &=, ^=,|=
Sammansatt tilldelningsoperatör är en av de viktigaste funktionerna i C ++ -språket som gör att vi kan ändra värdet på en variabel med en av de grundläggande operatörerna:
Exempel:
value += increase; is equivalent to value = value + increase; if base_salary is a variable of type int. int base_salary = 1000; base_salary += 1000; #base_salary = base_salary + 1000 base_salary *= 5; #base_salary = base_salary * 5;
F # 14) Ange skillnaden mellan operationer före och efter inkrement / minskning.
Svar: C ++ tillåter två operatorer, dvs ++ (inkrement) och - (decrement), som låter dig lägga till 1 till det befintliga värdet av en variabel och subtrahera 1 från variabeln respektive. Dessa operatörer kallas i sin tur increment (++) och decrement (-).
Exempel:
a = 5;
a ++;
Det andra uttalandet, a ++, kommer att leda till att 1 läggs till värdet på a. Således är a ++ ekvivalent med
a = a + 1; eller
a + = 1;
En unik egenskap hos dessa operatörer är att vi kan prefixa eller suffixa dessa operatorer med variabeln. Därför, om a är en variabel och vi prefixar inkrementoperatören kommer den att vara
++ a;
Detta kallas Pre-increment. På samma sätt har vi också förminskning.
Om vi prefixar variabeln a med en stegoperator, har vi,
a ++;
Detta är efterökningen. På samma sätt har vi också minskat efter.
Skillnaden mellan betydelsen av pre och post beror på hur uttrycket utvärderas och resultatet lagras.
I fallet med operatören före inkrement / minskning utförs inkrement / dekrementoperationen först och sedan skickas resultatet till en värde. Medan för operationer efter inkrement / minskning utvärderas värdet först och sedan utförs inkrement / minskning därefter.
Exempel:
a = 5; b = 6;
++ a; # a = 6
b–; # b = 6
–A; # a = 5
b ++; # 6
I / O via konsolen
F # 15) Vilka är extraktions- och insättningsoperatorerna i C ++? Förklara med exempel.
Svar: I iostream.h-biblioteket i C ++, Kina och kosta är de två dataströmmarna som används för in- respektive utmatning. Cout riktas normalt till skärmen och cin tilldelas tangentbordet.
“Cin” (extraktionsoperatör): Genom att använda överbelastad operatör >> med cin-ström hanterar C ++ standardingången.
int age; cin>>age;
Som visas i exemplet ovan deklareras en heltalvariabel 'ålder' och sedan väntar den på att cin (tangentbord) matar in data. “Cin” bearbetar ingången endast när du trycker på RETURN-tangenten.
“Cout” (insättningsoperatör): Detta används tillsammans med överbelastade<< operator. It directs the data that followed it into the cout stream.
Exempel:
skillnad mellan vänster koppling och vänster yttre koppling i sql
cout<<”Hello, World!”; cout<<123;
Kontrollstrukturer och funktioner
Kontrollstrukturer och öglor
F # 16) Vad är skillnaden mellan medan och gör medan slinga? Förklara med exempel.
Svar: Formatet för while loop i C ++ är:
While (uttryck)
{uttalanden;}
Uttalningsblocket under while körs så länge villkoret i det angivna uttrycket är sant.
Exempel:
#include int main() { int n; cout<>n; while(n>0) { cout<<” “<I ovanstående kod kommer slingan att avslutas direkt om n är 0. Således i medan slingan är avslutande villkor i början av slingan och om den uppfylls utförs inga iterationer av slingan.
Därefter överväger vi gör-medan-slingan.
Det allmänna formatet för do-while är:
gör {uttalande;} medan (villkor);
Exempel:
#include int main() { int n; cout<>n; do { cout<I ovanstående kod kan vi se att uttalandet inuti slingan exekveras minst en gång eftersom slingan är i slutet. Dessa är de viktigaste skillnaderna mellan medan och medan.
I händelse av while-slingan kan vi gå ut direkt från slingan i början, om villkoret inte är uppfyllt medan vi i do-while-slingan utför vi loop-uttalandena minst en gång.
Funktioner
F # 17) Vad menar du med ”ogiltig” returtyp?
Svar: Alla funktioner ska returnera ett värde enligt den allmänna syntaxen.
Om vi inte vill att en funktion ska returnera något värde använder vi ' tomhet ”För att indikera det. Detta innebär att vi använder ” tomhet ”För att indikera att funktionen inte har något returvärde eller returnerar“ tomhet ”.
Exempel:
void myfunc() { Cout<<”Hello,This is my function!!”; } int main() { myfunc(); return 0; }
F # 18) Förklara Pass by Value och Pass by Reference.
Svar: När vi skickar parametrar till funktionen med 'Pass by Value' skickar vi en kopia av parametrarna till funktionen.
Följaktligen ändras inte alla modifieringar av parametrarna i den anropade funktionen till den anropande funktionen. Således förblir variablerna i den anropande funktionen oförändrade.
Exempel:
void printFunc(int a,int b,int c) { a *=2; b *=2; c *=2; } int main() { int x = 1,y=3,z=4; printFunc(x,y,z); cout<<”x = “< Produktion:
x = 1
y = 3
z = 4
Som framgår ovan, även om parametrarna ändrades i den anropade funktionen, återspeglades inte deras värden i den anropande funktionen eftersom de skickades med värde.
Men om vi vill få tillbaka de ändrade värdena från funktionen till den anropande funktionen, använder vi tekniken 'Pass by Reference'.
För att demonstrera detta ändrar vi ovanstående program enligt följande:
void printFunc(int& a,int& b,int& c) { a *=2; b *=2; c *=2; } int main() { int x = 1,y=3,z=4; printFunc(x,y,z); cout<<”x = “< Produktion:
x = 2
y = 6
z = 8
Som visas ovan överförs de modifieringar som görs av parametrarna i de anropade funktionerna till anropsfunktionen när vi använder tekniken 'Pass by reference'. Detta beror på att med den här tekniken skickar vi inte en kopia av parametrarna utan vi skickar faktiskt själva variabelns referens.
F # 19) Vad är standardparametrar? Hur utvärderas de i C ++ -funktionen?
Svar: Standardparameter är ett värde som tilldelas varje parameter när en funktion deklareras.
Detta värde används om parametern lämnas tom när du ringer till funktionen. För att ange ett standardvärde för en viss parameter tilldelar vi helt enkelt ett värde till parametern i funktionsdeklarationen.
Om värdet inte skickas för denna parameter under funktionsanropet använder kompilatorn det angivna standardvärdet. Om ett värde anges, trampas det här standardvärdet och det godkända värdet används.
Exempel:
int multiply(int a, int b=2) { int r; r = a * b; return r; } int main() { Cout< Produktion:
12
6
Som visas i ovanstående kod finns det två samtal för att multiplicera funktionen. I det första samtalet skickas endast en parameter med ett värde. I det här fallet är den andra parametern det angivna standardvärdet. Men i det andra samtalet, eftersom båda parametervärdena passeras, åsidosätts standardvärdet och det passerade värdet används.
F # 20) Vad är en inline-funktion i C ++?
Svar: Inline-funktion är en funktion som kompileras av kompilatorn som punkten för att anropa funktionen och koden ersätts vid den punkten. Detta gör kompileringen snabbare. Denna funktion definieras genom att prefixet för funktionsprototypen med nyckelordet 'inline'.
Sådana funktioner är fördelaktiga endast när koden för inline-funktionen är liten och enkel. Även om en funktion definieras som Inline är det helt kompilatorberoende att utvärdera den som inline eller inte.
Avancerad datastruktur
Arrayer
F # 21) Varför bearbetas matriser vanligtvis med för loop?
Svar: Array använder indexet för att korsa vart och ett av dess element.
Om A är en matris nås vart och ett av dess element som A (i). Programmatiskt är allt som krävs för att detta ska fungera ett iterativt block med en loopvariabel i som fungerar som ett index (räknare) som ökar från 0 till A. längd-1.
Detta är exakt vad en slinga gör och det är anledningen till att vi bearbetar arrays med hjälp av loopar.
F # 22) Ange skillnaden mellan radera och radera ().
Svar: ”Delete ()” används för att frigöra minnet som tilldelats en array som allokerades med hjälp av nya (). ”Delete” används för att frigöra en bit minne som allokerades med nytt.
F # 23) Vad är fel med den här koden?
T * p = ny T (10);
ta bort p;
Svar: Ovanstående kod är syntaktiskt korrekt och kompilerar bra.
Det enda problemet är att det bara tar bort det första elementet i matrisen. Även om hela matrisen raderas kommer bara förstöraren av det första elementet att anropas och minnet för det första elementet släpps.
F # 24) I vilken ordning förstörs objekten i en matris?
Svar: Objekt i en grupp förstörs i omvänd ordningsföljd: först konstruerade, senast förstörda.
I följande exempel, ordern för destruktörer kommer att vara en (9), en (8),…, en (1), en (0):
voiduserCode() { Car a(10); ... }
Pekare
F # 25) Vad är fel med den här koden?
T * p = 0;
ta bort p;
Svar: I ovanstående kod är pekaren en nollpekare. Enligt C ++ 03-standarden är det perfekt att ringa radering på en NULL-pekare. Raderingsoperatören tar hand om NULL-kontrollen internt.
F # 26) Vad är en referensvariabel i C ++?
Svar: En referensvariabel är ett aliasnamn för den befintliga variabeln. Detta innebär att både variabelnamnet och referensvariabeln pekar på samma minnesplats. Därför, när variabeln uppdateras, uppdateras referensen också.
Exempel:
int a=10; int& b = a;
Här är b referensen till a.
Lagringsklasser
F # 27) Vad är en lagringsklass? Nämn lagringsklasserna i C ++.
Svar: Lagringsklass bestämmer livslängden eller omfattningen av symboler som variabel eller funktioner.
C ++ stöder följande lagringsklasser:
- Bil
- Statisk
- Extern
- Registrera
- Föränderlig
F # 28) Förklara specifieringen för mutable Storage-klass.
Svar: Variabeln för ett konstant klassobjekts medlem kan inte ändras. Men genom att förklara variablerna som 'muterbara' kan vi ändra värdena på dessa variabler.
F # 29) Vad är nyckelordet auto för?
Svar: Som standard är varje lokal variabel i funktionen automatisk, dvs. bil . I funktionen nedan är både variablerna 'i' och 'j' automatiska variabler.
void f() { int i; auto int j; }
NOTERA : En global variabel är inte en automatisk variabel.
F # 30) Vad är en statisk variabel?
Svar: En statisk variabel är en lokal variabel som behåller sitt värde över funktionsanropen. Statiska variabler deklareras med hjälp av nyckelordet 'statisk'. Numeriska variabler som är statiska har standardvärdet som noll.
Följande funktion skriver ut 1 2 3 om den kallas tre gånger.
void f() { static int i; ++i; printf(“%d “,i); }
Om en global variabel är statisk är dess synlighet begränsad till samma källkod.
F # 31) Vad är syftet med Extern Storage Specifier?
Svar: 'Extern' -specifikatorn används för att lösa omfattningen av en global symbol.
#include using nam espace std; main() { extern int i; cout< I ovanstående kod kan 'i' synas utanför filen där den är definierad.
F # 32) Förklara Register Storage Specifier.
Svar: Variabeln 'Register' ska användas när variabeln används. När en variabel deklareras med en 'register' -specifikator, ger kompilatorn CPU-register för sin lagring för att påskynda uppslaget av variabeln.
F # 33) När ska man använda 'const' -referensargument i en funktion?
Svar: Att använda 'const' -referensargument i en funktion är fördelaktigt på flera sätt:
- 'Const' skyddar från programmeringsfel som kan ändra data.
- Som ett resultat av att använda 'const' kan funktionen bearbeta både const och non-const faktiska argument, vilket inte är möjligt när 'const' inte används.
- Med hjälp av en const-referens kan funktionen generera och använda en tillfällig variabel på ett lämpligt sätt.
Struktur och användardefinierade datatyper
F # 34) Vad är en klass?
Svar: Class är en användardefinierad datatyp i C ++. Det kan skapas för att lösa en viss typ av problem. Efter skapandet är användaren inte skyldig att veta detaljerna i hur en klass fungerar.
Generellt fungerar klassen som en ritning av ett projekt och kan inkludera i olika parametrar och funktioner eller åtgärder som fungerar på dessa parametrar. Dessa kallas klassens medlemmar.
F # 35) Skillnad mellan klass och struktur.
Svar:
Strukturera: På C-språk används strukturen för att bunta ihop olika typer av datatyper. Variablerna i en struktur kallas medlemmarna i strukturen. Dessa medlemmar är som standard offentliga och kan nås med hjälp av strukturnamnet följt av en punktoperator och sedan medlemsnamnet.
Klass: Klass är en efterföljare till strukturen. C ++ utökar strukturdefinitionen till att omfatta de funktioner som fungerar på dess medlemmar. Som standard är alla medlemmar i klassen privata.
Objektorienterad programmering med C ++
Klasser, konstruktörer, förstörare
F # 36) Vad är namnområde?
Svar: Med namneområdet kan vi gruppera en uppsättning globala klasser, objekt och / eller funktioner under ett specifikt namn.
youtube till mp4-omvandlare gratis online utan nedladdning
Den allmänna formen för att använda namnområden är:
namnområdesidentifierare {namespace-body}
Där identifierare är vilken giltig identifierare som helst och namnutrymmet är den uppsättning klasser, objekt och funktioner som ingår i namnområdet. Namnytor är särskilt användbara i fall där det finns möjlighet för mer än ett objekt att ha samma namn, vilket resulterar i namnkollisioner.
F # 37) Vad är användningen av ”användning” -deklaration?
Svar: Användande av deklaration används för att hänvisa ett namn från namnområdet utan operatören för omfångsupplösning.
F # 38) Vad är Namn Mangling?
Svar: C ++ - kompilatorn kodar parametertyperna med funktion / metod till ett unikt namn. Denna process kallas namngång. Den omvända processen kallas för demangling.
Exempel:
A :: b (int, lång) const är förvirrad som 'B__C3Ail' .
För en konstruktör utesluts metodnamnet.
Det är A :: A (int, lång) const är förvirrad som 'C3Ail'.
F # 39) Vad är skillnaden mellan ett objekt och en klass?
Svar: Klass är en ritning av ett projekt eller problem som ska lösas och består av variabler och metoder. Dessa kallas klassens medlemmar. Vi kan inte komma åt metoder eller variabler i klassen på egen hand om de inte förklaras statiska.
För att få åtkomst till klassmedlemmarna och använda dem bör vi skapa en instans av en klass som kallas ett objekt. Klassen har en obegränsad livslängd medan ett objekt endast har en begränsad livslängd.
F # 40) Vilka är de olika åtkomstspecifikatorerna i C ++?
Svar: C ++ stöder följande åtkomstspecifikatorer:
- Offentlig: Datamedlemmar och funktioner är tillgängliga utanför klassen.
- Privat: Datamedlemmar och funktioner är inte tillgängliga utanför klassen. Undantaget är användningen av en vänklass.
- Skyddade: Datamedlemmar och funktioner är endast tillgängliga för de härledda klasserna.
Exempel:
Beskriv PRIVAT, SKYDDAD och OFFENTLIG tillsammans med deras skillnader och ge exempel.
class A{ int x; int y; public int a; protected bool flag; public A() : x(0) , y(0) {} //default (no argument) constructor }; main(){ A MyObj; MyObj.x = 5; // Compiler will issue a ERROR as x is private int x = MyObj.x; // Compiler will issue a compile ERROR MyObj.x is private MyObj.a = 10; // no problem; a is public member int col = MyObj.a; // no problem MyObj.flag = true; // Compiler will issue a ERROR; protected values are read only bool isFlag = MyObj.flag; // no problem
F # 41) Vad är en konstruktör och hur heter den?
Svar: Constructor är en medlemsfunktion i klassen med samma namn som klassen. Den används huvudsakligen för att initialisera medlemmarna i klassen. Som standard är konstruktörer offentliga.
Det finns två sätt på vilket konstruktörerna kallas:
- Implicit: Konstruktörer kallas implicit av kompilatorn när ett objekt i klassen skapas. Detta skapar ett objekt på en stack.
- Explicit Calling: När objektet för en klass skapas med hjälp av nya kallas konstruktörer uttryckligen. Detta skapar vanligtvis ett objekt på en hög.
Exempel:
class A{ int x; int y; public A() : x(0) , y(0) {} //default (no argument) constructor }; main() { A Myobj; // Implicit Constructor call. In order to allocate memory on stack, //the default constructor is implicitly called. A * pPoint = new A(); // Explicit Constructor call. In order to allocate //memory on HEAP we call the default constructor. }
F # 42) Vad är en COPY CONSTRUCTOR och när heter den?
Svar: En kopieringskonstruktör är en konstruktör som accepterar ett objekt av samma klass som dess parameter och kopierar sina datamedlemmar till objektet till vänster i uppdraget. Det är användbart när vi behöver konstruera ett nytt objekt av samma klass.
Exempel:
class A{ int x; int y; public int color; public A() : x(0) , y(0) {} //default (no argument) constructor public A( const A& ) ; }; A::A( const A & p ) { this->x = p.x; this->y = p.y; this->color = p.color; } main() { A Myobj; Myobj.color = 345; A Anotherobj = A( Myobj ); // now Anotherobj has color = 345 }
F # 43) Vad är en standardkonstruktör?
Svar: Standardkonstruktör är en konstruktör som antingen inte har några argument eller om det finns några, så är alla standardargument.
Exempel:
class B { public: B (int m = 0) : n (m) {} int n; }; int main(int argc, char *argv()) { B b; return 0; }
F # 44) Vad är en Conversion Constructor?
Svar: Det är en konstruktör som accepterar ett argument av en annan typ. Omvandlingskonstruktörer används främst för konvertering från en typ till en annan.
F # 45) Vad är en Explicit Constructor?
Svar: En konverteringskonstruktör deklareras med det explicita nyckelordet. Kompilatorn använder inte en explicit konstruktör för att implementera en underförstådd konvertering av typer. Dess syfte är reserverat uttryckligen för konstruktion.
F # 46) Vilken roll har det statiska nyckelordet för en klassmedelsvariabel?
Svar: Den statiska medlemsvariabeln delar ett gemensamt minne över alla objekt som skapats för respektive klass. Vi behöver inte hänvisa till den statiska variabeln som använder ett objekt. Det kan dock nås med hjälp av själva klassnamnet.
F # 47) Förklara funktionen Statisk medlem.
Svar: En statisk medlemsfunktion har endast åtkomst till variabeln för statisk medlem i klassen. Samma som de statiska medlemsvariablerna, en statisk medlemsfunktion kan också nås med klassnamnet.
F # 48) I vilken ordning förstörs de lokala objekten?
Svar: Överväg att följa en kod:
Class A{ …. }; int main() { A a; A b; ... }
I huvudfunktionen har vi två objekt skapade efter varandra. De skapas i ordning, först a sedan b. Men när dessa objekt tas bort eller om de går utanför räckvidden kommer destruktorn för var och en att kallas i omvänd ordning i vilken de konstruerades.
Därför kommer förstöraren av b att kallas först följt av a. Även om vi har en rad objekt kommer de att förstöras på samma sätt i omvänd ordning av deras skapande.
Överbelastning
F # 49) Förklara funktionsöverbelastning och operatörsöverbelastning.
Svar: C ++ stöder OOP-konceptet polymorfism som betyder ”många former”.
I C ++ har vi två typer av polymorfism, det vill säga sammanställningstidspolymorfism och körtidspolymorfism. Sammanställningstidspolymorfism uppnås genom att använda en överbelastningsteknik. Överbelastning betyder helt enkelt att ge ytterligare en mening till en enhet genom att hålla sin grundbetydelse intakt.
C ++ stöder två typer av överbelastning:
Funktionsöverbelastning:
Funktionsöverbelastning är en teknik som gör det möjligt för programmeraren att ha mer än en funktion med samma namn men annan parameterlista. Med andra ord överbelastar vi funktionen med olika argument, det vill säga det är typ av argument, antal argument eller ordningsföljd.
Funktionsöverbelastning uppnås aldrig på dess returtyp.
Överbelastning av operatören:
Detta är ännu en annan typ av sammanställningstidspolymorfism som stöds av C ++. Vid operatörsöverbelastning är en operatör överbelastad så att den kan fungera på de användardefinierade typerna också med operander av standarddatatyp. Men medan du gör detta hålls standarddefinitionen för den operatören intakt.
Till exempel, en tilläggsoperatör (+) som arbetar med numeriska datatyper kan överbelastas för att fungera på två objekt precis som ett objekt av komplexa talklasser.
F # 50) Vad är skillnaden mellan metodöverbelastning och metodöverskridande i C ++?
Svar: Metodöverbelastning har funktioner med samma namn men olika argumentlistor. Detta är en form av sammanställningstidspolymorfism.
Metodöverstyrning kommer in i bilden när vi skriver om metoden som härrör från en basklass. Metodöverstyrning används när man hanterar polymorfism under körning eller virtuella funktioner.
F # 51) Vad är skillnaden mellan en Copy Constructor och en Overloaded? Uppdragsoperatör?
Svar: En kopiekonstruktör och en överbelastad uppdragsoperatör tjänar i princip samma syfte, dvs att tilldela innehållet i ett objekt till ett annat. Men ändå är det skillnad mellan de två.
Exempel:
complex c1,c2; c1=c2; //this is assignment complex c3=c2; //copy constructor
I exemplet ovan är det andra uttalandet c1 = c2 ett överbelastat tilldelningsuttalande.
Här är både c1 och c2 redan existerande objekt och innehållet i c2 tilldelas objektet c1. Därför måste båda objekten redan skapas för överbelastat tilldelningsuttalande.
Nästa uttalande, komplex c3 = c2 är ett exempel på kopiekonstruktören. Här tilldelas innehållet i c2 till ett nytt objekt c3, vilket innebär att kopiekonstruktören skapar ett nytt objekt varje gång det körs.
F # 52) Namnge de operatörer som inte kan överbelastas.
Svar:
- sizeof - storlek på operatören
- . - Dotoperatör
- . * - operatör för referenser
- -> - medlemmar operatör för avferens
- :: - omfångsupplösningsoperatör
- ?: - villkorlig operatör
F # 53) Funktionen kan överbelastas baserat på parametern som är ett värde eller en referens. Förklara om påståendet är sant.
Svar: Falsk. Både Passing by value och Passing by reference ser identiska ut som den som ringer.
F # 54) Vilka är fördelarna med operatörsöverbelastning?
Svar: Genom att överbelasta standardoperatörer på en klass kan vi utöka innebörden av dessa operatörer, så att de också kan fungera på andra användardefinierade objekt.
Med funktionsöverbelastning kan vi minska kodens komplexitet och göra den tydligare och läsbar eftersom vi kan ha samma funktionsnamn med olika argumentlistor.
Arv
F # 55) Vad är arv?
Svar: Arv är en process genom vilken vi kan förvärva egenskaperna hos en befintlig enhet och bilda en ny enhet genom att lägga till fler funktioner i den.
När det gäller C ++, är arv att skapa en ny klass genom att härleda den från en befintlig klass så att den här nya klassen har såväl dess moderklass som dess egen.
F # 56) Vilka är fördelarna med arv?
Svar: Arv möjliggör återanvändning av kod, vilket sparar tid på kodutveckling.
Genom att ärva använder vi en buggfri högkvalitativ programvara som minskar framtida problem.
F # 57) Stöder C ++ flera nivåer och flera arv?
Svar: Ja.
F # 58) Vad är flera arv (virtuellt arv)? Vilka är dess fördelar och nackdelar?
Svar: I flera arv har vi mer än en basklass från vilken en härledd klass kan ärva. Därför tar en härledd klass funktioner och egenskaper hos mer än en basklass.
Till exempel , en klass förare kommer att ha två basklasser, nämligen anställd och en person eftersom en förare är såväl en anställd som en person. Detta är fördelaktigt eftersom förarklassen kan ärva både anställdas och personklassens egenskaper.
Men när det gäller en anställd och en person kommer klassen att ha vissa egenskaper gemensamt. En tvetydig situation uppstår dock eftersom förarklassen inte känner till de klasser som de gemensamma egenskaperna ska ärvas från. Detta är den största nackdelen med flera arv.
F # 59) Förklara klassförhållandena mellan ISA och HASA. Hur skulle du implementera varje?
Svar: 'ISA' -förhållande uppvisar vanligtvis arv eftersom det antyder att en klass 'ISA' specialiserad version av en annan klass. Till exempel , En anställd ISA-person. Det betyder att en anställdsklass ärvs från personklassen.
I motsats till ”ISA” visar ”HASA” -förhållandet att en enhet kan ha en annan enhet som medlem eller att en klass har ett annat objekt inbäddat i sig.
Så med samma exempel på en anställdsklass är det sätt på vilket vi associerar löneklassen med den anställde inte genom att ärva den utan genom att inkludera eller innehålla löneföremålet i arbetsklassen. 'HASA' -förhållandet visas bäst genom inneslutning eller aggregering.
F # 60) Ärver en härledd klass eller ärver den inte?
Svar: När en härledd klass konstrueras från en viss basklass ärver den i princip alla funktioner och vanliga medlemmar i basklassen. Men det finns några undantag från denna regel. Till exempel ärver en härledd klass inte basklassens konstruktörer och destruktorer.
Varje klass har sina egna konstruktörer och destruktorer. Den härledda klassen ärver inte heller tilldelningsoperatören för basklassen och klassens vänner. Anledningen är att dessa enheter är specifika för en viss klass och om en annan klass härleds eller om det är den klassens vän kan de inte överföras till dem.
Polymorfism
F # 61) Vad är polymorfism?
Svar: Grundidén bakom polymorfism finns i många former. I C ++ har vi två typer av polymorfism:
(i) Sammanställningstidspolymorfism
I sammanställningstidspolymorfism uppnår vi många former genom överbelastning. Därför har vi en överbelastning av operatören och överbelastning av funktioner. (Vi har redan täckt detta ovan)
(ii) Polymorfism under körning
Detta är polymorfismen för klasser och föremål. Allmän idé är att en basklass kan ärvas av flera klasser. En basklasspekare kan peka på sin underklass och en basklassmatris kan lagra olika underordnade klassobjekt.
Detta betyder att ett objekt reagerar annorlunda på samma funktionsanrop. Denna typ av polymorfism kan använda en virtuell funktionsmekanism.
F # 62) Vad är virtuella funktioner?
Svar: En virtuell funktion tillåter de härledda klasserna att ersätta implementeringen från basklassen.
Närhelst vi har funktioner med samma namn i basen såväl som härledd klass uppstår tvetydighet när vi försöker komma åt barnklassobjektet med en basklasspekare. Eftersom vi använder en basklasspekare är funktionen som kallas basklassfunktionen med samma namn.
För att korrigera denna tvetydighet använder vi nyckelordet ”virtuellt” före funktionsprototypen i basklassen. Med andra ord gör vi denna polymorfa funktion virtuell. Genom att använda en virtuell funktion kan vi ta bort tvetydigheten och få tillgång till alla barnklassfunktioner korrekt med en basklasspekare.
F # 63) Ge ett exempel på körtidspolymorfism / virtuella funktioner.
Svar:
class SHAPE{ public virtual Draw() = 0; //abstract class with a pure virtual method }; class CIRCLE: public SHAPE{ public int r; public Draw() { this->drawCircle(0,0,r); } }; class SQUARE: public SHAPE{ public int a; public Draw() { this->drawSquare(0,0,a,a); } }; int main() { SHAPE shape1*; SHAPE shape2*; CIRCLE c1; SQUARE s1; shape1 = &c1; shape2 = &s1; coutI ovanstående kod har SHAPE-klassen en ren virtuell funktion och är en abstrakt klass (kan inte instantieras). Varje klass härleds från SHAPE som implementerar Draw () -funktionen på sitt eget sätt.
Vidare är varje Draw-funktion virtuell så att när vi använder en basklass (SHAPE) -pekare varje gång med objektet från de härledda klasserna (Circle och SQUARE) kallas lämpliga Draw-funktioner.
F # 64) Vad menar du med rena virtuella funktioner?
Svar: En ren virtuell medlemsfunktion är en medlemsfunktion där basklassen tvingar de härledda klasserna att åsidosätta. Normalt har denna medlemsfunktion ingen implementering. Rena virtuella funktioner är lika med noll.
Exempel:
class Shape { public: virtual void draw() = 0; };
Basklass som har en ren virtuell funktion som medlem kan betecknas som en 'abstrakt klass'. Denna klass kan inte instansieras och den fungerar vanligtvis som en ritning som har flera underklasser med ytterligare implementering.
F # 65) Vad är virtuella konstruktörer / förstörare?
Svar:
Virtuella förstörare: När vi använder en basklasspekare som pekar på ett härledt klassobjekt och använder det för att förstöra det, istället för att anropa den härledda klassdestruktören kallas basklassdestruktören.
Exempel:
Class A{ …. ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Som vi ser i exemplet ovan, när vi säger ta bort a, kallas destruktorn men det är faktiskt basklassdestruktören. Detta ger upphov till tvetydigheten att allt minne som b rymmer inte kommer att rensas ordentligt.
Detta problem kan lösas med hjälp av 'Virtual Destructor' -konceptet.
Vad vi gör är att vi gör basklasskonstruktören 'virtuell' så att alla barnklassdestruktörer också blir virtuella och när vi tar bort objektet från basklassen som pekar på objektet för den härledda klassen kallas lämplig destruktör och allt objekten raderas ordentligt.
Detta visas på följande sätt:
hur man kör en .swf-fil
Class A{ …. virtual ~A(); }; Class B:publicA{ … ~B(); }; B b; A a = &b; delete a;
Virtuell byggare : Konstruktörer kan inte vara virtuella. Att deklarera en konstruktör som en virtuell funktion är ett syntaxfel.
Vän
F # 66) Vad är en vänfunktion?
Svar: C ++ klass tillåter inte åtkomst till sina privata och skyddade medlemmar utanför klassen. Men denna regel kan brytas genom att använda ” Vän ”-Funktion.
Som namnet själv antyder är vänfunktionen en extern funktion som är en klassvän. För att vänfunktionen ska få tillgång till klassens privata och skyddade metoder bör vi ha en prototyp av vänfunktionen med nyckelordet 'vän' inkluderad i klassen.
F # 67) Vad är en vänklass?
Svar: Vänklasser används när vi behöver åsidosätta regeln för privata och skyddade åtkomstspecifikatorer så att två klasser kan arbeta nära varandra.
Därför kan vi ha en vänklass för att vara en vän av en annan klass. På så sätt kan vänklasser hålla privata, oåtkomliga saker som de är.
När vi har ett krav på att få tillgång till den interna implementeringen av en klass (privat medlem) utan att avslöja detaljerna genom att göra allmänheten, går vi för vänfunktioner.
Avancerad C ++
Mallar
F # 68) Vad är en mall?
Svar: Mallar gör det möjligt att skapa funktioner som är oberoende av datatyp (generisk) och kan ta vilken datatyp som parametrar och returnera värde utan att behöva överbelasta funktionen med alla möjliga datatyper. Mallar uppfyller nästan funktionaliteten i ett makro.
Dess prototyp är någon av följande:
mall identifiera > funktionsdeklaration;
mall identifiera > funktionsdeklaration;
Den enda skillnaden mellan båda prototyperna är användningen av nyckelordsklass eller typnamn. Deras grundläggande funktionalitet att vara generisk förblir densamma.
Undantagshantering
F # 69) Vad är undantagshantering? Stöder C ++ undantagshantering?
Svar: Ja C ++ stöder undantagshantering.
Vi kan inte säkerställa att koden alltid fungerar. Det kan finnas vissa situationer som kan tvinga koden skrivna av oss att fungera, även om den är felfri. Denna funktionsfel i koden kallas Undantag .
När ett undantag har inträffat måste kompilatorn kasta det så att vi vet att ett undantag har inträffat. När ett undantag har kastats måste kompilatorn se till att den hanteras ordentligt så att programflödet fortsätter eller avslutas ordentligt. Detta kallas hantering av ett undantag.
Således i C ++ har vi tre nyckelord, dvs. Prova , kasta och fånga som är i undantagshantering.
Den allmänna syntaxen för undantagsblock är:
try{ …. # Code that is potentially about to throw exception goes here …. throw exception; } catch(exception type) { … #code to handle exception goes here }
Som visas ovan placeras koden som kan ha funktionsfel under försöksblocket. När koden inte fungerar fungerar ett undantag. Detta undantag fångas sedan under fångsten och hanteras, dvs lämpliga åtgärder vidtas.
F # 70) Kommentar C ++ standardundantag?
Svar: C ++ stöder några standardundantag som kan fångas om vi lägger koden inuti försöksblocket. Dessa undantag är en del av basklassen ” std :: undantag ”. Denna klass definieras i C ++ -huvudfilen.
Få exempel på undantag som stöds av denna klass inkluderar:
bad_alloc - kastas av 'nya'
runtime_error - kastas för runtime-fel
bad_typeid - kastas efter typ-id
Introduktion till standardmallbiblioteket
F # 71) Vad är ett standardmallbibliotek (STL)? Vilka är de olika typerna av STL-behållare?
Svar: Ett standardmallbibliotek (STL) är ett bibliotek med behållarmallar som godkänts av ANSI-kommittén för att ingå i standard C ++ - specifikationen. Vi har olika typer av STL-containrar beroende på hur de lagrar elementen.
- Kö, stack - Dessa är samma som traditionell kö och stack och kallas adaptiva containrar.
- Ställ in, karta - Det här är i grund och botten behållare som har nyckel / värdepar och är associerande till sin natur.
- Vector och - Dessa är sekventiella till sin natur och har likheter med matriser.
F # 72) Vad är en Iterator-klass?
Svar: I C ++ är en behållarklass en samling av olika objekt.
Om vi behöver gå igenom denna samling objekt kan vi inte göra det med enkla indexvariabler. Därför har vi en specialklass i STL som kallas en Iterator klass som kan användas för att gå igenom innehållet i behållarklassen.
De olika kategorierna av iteratorer inkluderar input iterators, output iterators, forward iterators, bidirectional iterators, random access, etc.
F # 73) Vad är skillnaden mellan en extern Iterator och en Intern Iterator? Beskriv en fördel med den externa Iteratorn.
Svar: En intern iterator implementeras med medlemsfunktioner i klassen som har föremål att gå igenom.
En extern iterator implementeras som en separat klass som kan bindas till objektet som har objekt att gå igenom. Den grundläggande fördelen med en extern iterator är att den är enkel att implementera eftersom den implementeras som en separat klass.
För det andra, eftersom det är en annan klass, kan många iteratorobjekt vara aktiva samtidigt.
Ytterligare läsning => C # intervjufrågor
Slutsats
Nästan alla viktiga kodnings- och programmeringsämnen i C ++ - intervjun behandlas i den här artikeln.
Vi hoppas att varje kandidat kommer att känna sig avslappnad efter att ha förberett sig för en intervju med hjälp av denna serie intervjufrågor.
Allt det bästa för din intervju !!
Rekommenderad läsning
- Intervjufrågor och svar
- ETL Testing Intervju Frågor och svar
- Några knepiga manuella testfrågor och svar
- 25 bästa intervjuer och svar på Agile Testing
- Spock intervjufrågor med svar (mest populära)
- Några intressanta programtestintervjufrågor
- Topp 20+ .NET-intervjufrågor och svar
- Topp 32 bästa datastationsintervjuer och frågor