top 70 c interview questions
Meest gestelde basis- en geavanceerde C ++ interviewvragen met codevoorbeelden voor zowel beginners als ervaren professionals:
Dit gedetailleerde artikel zal zeker een bladwijzer zijn voor degenen die zich voorbereiden op een C ++ -interview.
Bijna alle belangrijke onderwerpen in C ++ worden hier behandeld, samen met enkele basisvragen over geavanceerde onderwerpen zoals Standard Template Library (STL), enz.
Deze reeks C ++ -coderingsvragen helpt u om elk C ++ -interview met vertrouwen tegemoet te treden en het bij de eerste poging met succes op te lossen.
Wat je leert:
- C ++ Interviewvragen met codevoorbeelden
C ++ Interviewvragen met codevoorbeelden
Hieronder staan de meest populaire C ++ programmeer interviewvragen die worden beantwoord door een C ++ expert.
Lees ook => Top C Programming Interview Vragen
Basis C ++
Structuur van C ++ -programma
V # 1) Wat is de basisstructuur van een C ++ -programma?
Antwoord: De basisstructuur van een C ++ -programma wordt hieronder weergegeven:
De eerste regel die begint met ' ' is een preprocessor richtlijn In dit geval gebruiken we omvatten als een instructie die de compiler vertelt om een header op te nemen terwijl “ iostream.h ”Die later in het programma zal worden gebruikt voor basisinvoer / uitvoer.
De volgende regel is de 'hoofd' -functie die een geheel getal retourneert. De belangrijkste functie is het startpunt van uitvoering voor elk C ++ -programma. Ongeacht de positie in het broncodebestand, wordt de inhoud van de hoofdfunctie altijd eerst uitgevoerd door de C ++ - compiler.
Op de volgende regel zien we open accolades die het begin van een codeblok aangeven. Hierna zien we de programmeerinstructie of de regel code die de telling gebruikt, wat de standaard uitvoerstroom is (de definitie ervan is aanwezig in iostream.h).
Deze uitvoerstroom neemt een reeks tekens en drukt deze af op een standaard uitvoerapparaat. In dit geval is het: 'Hallo wereld!'. Houd er rekening mee dat elke C ++ -instructie eindigt met een puntkomma (;), wat zeer noodzakelijk is en het weglaten ervan zal resulteren in compilatiefouten.
Voordat we de accolades sluiten}, zien we nog een regel “return 0;”. Dit is het terugkeerpunt naar de hoofdfunctie.
Elk C ++ -programma heeft een basisstructuur zoals hierboven weergegeven met een preprocessorrichtlijn, een hoofdfunctieverklaring gevolgd door een codeblok en vervolgens een terugkerend punt naar de hoofdfunctie die aangeeft dat het programma succesvol is uitgevoerd.
Q # 2) Wat zijn de opmerkingen in C ++?
Antwoord: Opmerkingen in C ++ zijn gewoon een stukje broncode dat door de compiler wordt genegeerd. Ze zijn alleen nuttig voor een programmeur om een beschrijving of aanvullende informatie over hun broncode toe te voegen.
In C ++ zijn er twee manieren om opmerkingen toe te voegen:
- // commentaar van één regel
- / * opmerking blokkeren * /
Het eerste type zal alles weggooien nadat de compiler '//' tegenkomt. In het tweede type verwijdert de compiler alles tussen '/ *' en '* /'.
Variabelen, gegevenstypen en constanten
V # 3) Verschil tussen verklaring en definitie van een variabele.
Antwoord: De declaratie van een variabele is slechts het specificeren van het gegevenstype van een variabele en de variabelenaam. Als resultaat van de declaratie vertellen we de compiler om de ruimte voor een variabele in het geheugen te reserveren volgens het opgegeven gegevenstype.
Voorbeeld:
Al het bovenstaande zijn geldige verklaringen. Merk ook op dat als resultaat van de declaratie de waarde van de variabele onbepaald is.
Terwijl een definitie een implementatie / instantiatie is van de gedeclareerde variabele waarbij we de juiste waarde koppelen aan de gedeclareerde variabele, zodat de linker referenties naar de juiste entiteiten kan koppelen.
Van bovenstaand voorbeeld
Resultaat = 10;
C = ‘A’;
Dit zijn geldige definities.
Vraag 4) Commentaar op de lokale en globale reikwijdte van een variabele.
Antwoord: Het bereik van een variabele wordt gedefinieerd als de omvang van de programmacode waarbinnen de variabele actief blijft, d.w.z. het kan worden gedeclareerd, gedefinieerd of ermee gewerkt.
Er zijn twee soorten bereik in C ++:
- Lokaal bereik: Er wordt gezegd dat een variabele een lokaal bereik heeft of lokaal is wanneer het binnen een codeblok wordt gedeclareerd. De variabele blijft alleen actief binnen het blok en is niet toegankelijk buiten het codeblok.
- Globaal toepassingsgebied: Een variabele heeft een globaal bereik wanneer deze toegankelijk is in het hele programma. Een globale variabele wordt boven op het programma gedeclareerd vóór alle functiedefinities.
Voorbeeld:
Vraag 5) Wat is de prioriteit als er een Globale variabele en een Lokale variabele in het programma met dezelfde naam zijn?
Antwoord: Elke keer als er een lokale variabele is met dezelfde naam als die van een globale variabele, geeft de compiler voorrang aan de lokale variabele.
Voorbeeld:
De output van de bovenstaande code is 5. Dit komt doordat, hoewel beide variabelen dezelfde naam hebben, de compiler de voorkeur heeft gegeven aan de lokale scope.
V # 6) Als er een globale variabele en een lokale variabele met dezelfde naam zijn, hoe krijgt u dan toegang tot de globale variabele?
Antwoord: Als er twee variabelen zijn met dezelfde naam maar een verschillend bereik, d.w.z. de ene is een lokale variabele en de andere is een globale variabele, dan zal de compiler de voorkeur geven aan een lokale variabele.
Om toegang te krijgen tot de globale variabele, maken we gebruik van een “ scope resolutie operator (: :) Met behulp van deze operator hebben we toegang tot de waarde van de globale variabele.
Voorbeeld:
Uitgang:
Globale variabele x = 10
lokale variabele x = 2
Q # 7) Hoeveel manieren zijn er om een int te initialiseren met een constante?
Antwoord: Er zijn twee manieren:
- Het eerste formaat gebruikt de traditionele C-notatie.
int resultaat = 10; - Het tweede formaat gebruikt de constructor-notatie.
int resultaat (10);
Constanten
V # 8) Wat is een constante? Leg uit met een voorbeeld.
Antwoord: Een constante is een uitdrukking met een vaste waarde. Ze kunnen worden onderverdeeld in integer-, decimale-, floating-point-, teken- of stringconstanten, afhankelijk van hun gegevenstype.
Afgezien van het decimaal, ondersteunt C ++ ook nog twee constanten, d.w.z. octale (tot basis 8) en hexadecimale (tot basis 16) constanten.
Voorbeelden van constanten:
- 75 // geheel getal (decimaal)
- 0113 // octaal
- 0x4b // hexadecimaal
- 3.142 // drijvende komma
- ‘C’ // tekenconstante
- 'Hallo, wereld' // tekenreeksconstante
Notitie: Als we een enkel teken moeten vertegenwoordigen, gebruiken we enkele aanhalingstekens en als we een constante met meer dan één teken willen definiëren, gebruiken we dubbele aanhalingstekens.
V # 9) Hoe definieer / declareer je constanten in C ++?
Antwoord: In C ++ kunnen we onze eigen constanten definiëren met de #bepalen preprocessor richtlijn.
#define Identifier-waarde
Voorbeeld:
Uitgang: Oppervlakte van een cirkel = 78,55
Zoals in het bovenstaande voorbeeld wordt getoond, kunnen we, zodra we een constante definiëren met de richtlijn #define, deze in het hele programma gebruiken en de waarde ervan vervangen.
We kunnen constanten in C ++ declareren met de ' const ”Trefwoord. Deze manier is vergelijkbaar met het declareren van een variabele, maar met een const prefix.
Voorbeelden van het declareren van een constante
const int pi = 3.142;
const char c = 'sth';
const postcode = 411014;
In de bovenstaande voorbeelden, wanneer het type van een constante niet is opgegeven, stelt de C ++ - compiler dit standaard in op een integer-type.
Operatoren
Vraag 10) Commentaar op de toewijzingsoperator in C ++.
Antwoord: Toewijzingsoperator in C ++ wordt gebruikt om een waarde aan een andere variabele toe te wijzen.
a = 5;
Deze regel code wijst de gehele waarde toe 5 naar variabele naar
Het gedeelte aan de linkerkant van de = -operator staat bekend als een lvalue (linker waarde) en rechts als rwaarde (juiste waarde). L. waarde moet altijd een variabele zijn, terwijl de rechterkant een constante, een variabele, het resultaat van een bewerking of een combinatie daarvan kan zijn.
De toewijzingsoperatie vindt altijd plaats van rechts naar links en nooit omgekeerd.
Een eigenschap die C ++ heeft ten opzichte van de andere programmeertalen is dat de toewijzingsoperator kan worden gebruikt als de rwaarde (of onderdeel van een rwaarde ) voor een andere opdracht.
Voorbeeld:
a = 2 + (b = 5);
is gelijk aan:
b = 5;
a = 2 + b;
Dat betekent: eerst toewijzen 5 naar variabele b en vervolgens toewijzen aan naar, de waarde twee plus het resultaat van de vorige uitdrukking van b (dat is 5), bladeren naar met een eindwaarde van 7
De volgende uitdrukking is dus ook geldig in C ++:
a = b = c = 5;
wijs 5 toe aan variabelen naar b en c
V # 11) Wat is het verschil tussen gelijk aan (==) en Assignment Operator (=)?
Antwoord: In C ++ zijn gelijk aan (==) en toewijzingsoperator (=) twee totaal verschillende operatoren.
Gelijk aan (==) is een relationele operator voor gelijkheid die twee expressies evalueert om te zien of ze gelijk zijn en true retourneert als ze gelijk zijn en false als ze dat niet zijn.
De toewijzingsoperator (=) wordt gebruikt om een waarde aan een variabele toe te wijzen. Daarom kunnen we een complexe toewijzingsoperatie uitvoeren binnen de relationele gelijkheidsoperator voor evaluatie.
V # 12) Wat zijn de verschillende rekenkundige operatoren in C ++?
Antwoord: C ++ ondersteunt de volgende rekenkundige operatoren:
- + toevoeging
- - aftrekken
- * vermenigvuldiging
- / divisie
- % module
Laten we de verschillende rekenkundige operatoren demonstreren met het volgende stuk code.
Voorbeeld:
Uitvoer
een + b = 8
a - b = 2
a * b = 15
a / b = 2
a% b = 1
Zoals hierboven getoond, zijn alle andere bewerkingen eenvoudig en hetzelfde als feitelijke rekenkundige bewerkingen, behalve de modulo-operator die behoorlijk verschilt. Modulo-operator deelt a en b en het resultaat van de bewerking is de rest van de deling.
V # 13) Wat zijn de verschillende samengestelde toewijzingsoperatoren in C ++?
Antwoord: Hieronder volgen de samengestelde toewijzingsoperatoren in C ++:
<<=, &=, ^=,|=
Samengestelde toewijzingsoperator is een van de belangrijkste kenmerken van C ++ - taal waarmee we de waarde van een variabele kunnen wijzigen met een van de basisoperatoren:
Voorbeeld:
V # 14) Geef het verschil aan tussen pre- en post-increment / decrement-bewerkingen.
Antwoord: C ++ staat twee operatoren toe, d.w.z. ++ (increment) en - (decrement), waarmee u 1 kunt optellen bij de bestaande waarde van een variabele en 1 kunt aftrekken van de variabele. Deze operatoren worden op hun beurt increment (++) en decrement (-) genoemd.
Voorbeeld:
a = 5;
a ++;
De tweede instructie, a ++, zorgt ervoor dat 1 wordt toegevoegd aan de waarde van a. Dus a ++ is gelijk aan
a = a + 1; of
a + = 1;
Een uniek kenmerk van deze operatoren is dat we deze operatoren kunnen prefixen of suffixen met de variabele. Dus als a een variabele is en we een prefix van de increment-operator hebben, zal het zijn
++ een;
Dit heet Pre-increment. Evenzo hebben we ook pre-verlaging.
Als we de variabele a voorvoegsel met een increment-operator, hebben we,
a ++;
Dit is de post-increment. Evenzo hebben we ook post-verlaging.
Het verschil tussen de betekenis van pre en post hangt af van hoe de uitdrukking wordt geëvalueerd en het resultaat wordt opgeslagen.
In het geval van de voorverhogings- / verlagingsoperator wordt eerst de verhogings- / verlagingsbewerking uitgevoerd en vervolgens wordt het resultaat doorgegeven aan een lwaarde. Terwijl voor bewerkingen na het verhogen / verlagen de lwaarde eerst wordt geëvalueerd en vervolgens wordt het verhogen / verlagen dienovereenkomstig uitgevoerd.
Voorbeeld:
a = 5; b = 6;
++ een; # a = 6
b–; # b = 6
-een; # a = 5
b ++; # 6
I / O via console
V # 15) Wat zijn de extractie- en invoegoperatoren in C ++? Leg uit met voorbeelden.
Antwoord: In de iostream.h-bibliotheek van C ++, China , en kosten zijn de twee datastromen die worden gebruikt voor respectievelijk invoer en uitvoer. Cout wordt normaal gesproken naar het scherm geleid en cin wordt aan het toetsenbord toegewezen.
'Cin' (extractie-operator): Door overbelaste operator >> met cin stream te gebruiken, verwerkt C ++ de standaardinvoer.
Zoals in het bovenstaande voorbeeld wordt getoond, wordt een integer-variabele ‘age’ gedeclareerd en wacht het tot cin (toetsenbord) de gegevens invoert. 'Cin' verwerkt de invoer alleen als de RETURN-toets wordt ingedrukt.
'Cout' (invoegoperator): Dit wordt gebruikt in combinatie met de overbelasting<< operator. It directs the data that followed it into the cout stream.
Voorbeeld:
unix beveelt interviewvragen en antwoorden pdf
Besturingsstructuren en functies
Controle structuren en lussen
V # 16) Wat is het verschil tussen while en do while loop? Leg uit met voorbeelden.
Antwoord: Het formaat van while-lus in C ++ is:
While (uitdrukking)
{verklaringen;}
Het instructieblok onder while wordt uitgevoerd zolang de voorwaarde in de gegeven expressie waar is.
Voorbeeld:
In de bovenstaande code wordt de lus direct afgesloten als n 0 is. Dus in de while-lus bevindt de afsluitvoorwaarde zich aan het begin van de lus en als eraan is voldaan, worden er geen iteraties van de lus uitgevoerd.
Vervolgens kijken we naar de do-while-lus.
Het algemene formaat van do-while is:
do {statement;} while (voorwaarde);
Voorbeeld:
gratis pc-reparatietool windows 10
In de bovenstaande code kunnen we zien dat de instructie in de lus minstens één keer wordt uitgevoerd, aangezien de lusvoorwaarde aan het einde is. Dit zijn de belangrijkste verschillen tussen de while en do-while.
In het geval van de while-lus kunnen we de lus direct aan het begin verlaten, als niet aan de voorwaarde wordt voldaan, terwijl we in de do-while-lus de lus-instructies minstens één keer uitvoeren.
Functies
V # 17) Wat bedoel je met 'ongeldig' retourtype?
Antwoord: Alle functies moeten een waarde retourneren volgens de algemene syntaxis.
Als we echter niet willen dat een functie een waarde retourneert, gebruiken we ' leegte ”Om dat aan te geven. Dit betekent dat we ' leegte 'Om aan te geven dat de functie geen retourwaarde heeft of' leegte
Voorbeeld:
Vraag 18) Verklaar Pass by Value en Pass by Reference.
Antwoord: Terwijl we parameters doorgeven aan de functie met behulp van “Pass by Value”, geven we een kopie van de parameters door aan de functie.
Daarom worden alle wijzigingen die worden aangebracht aan de parameters in de aangeroepen functie niet teruggegeven aan de aanroepende functie. De variabelen in de aanroepende functie blijven dus ongewijzigd.
Voorbeeld:
Uitgang:
x = 1
y = 3
z = 4
Zoals hierboven is te zien, werden de parameters weliswaar gewijzigd in de aangeroepen functie, maar hun waarden werden niet weerspiegeld in de aanroepende functie omdat ze werden doorgegeven door waarde.
Als we echter de gewijzigde waarden van de functie terug willen krijgen naar de aanroepende functie, dan gebruiken we de 'Pass by Reference' -techniek.
Om dit aan te tonen passen we het bovenstaande programma als volgt aan:
Uitgang:
x = 2
y = 6
z = 8
Zoals hierboven getoond, worden de wijzigingen die zijn aangebracht aan de parameters in de aangeroepen functies doorgegeven aan de aanroepende functie wanneer we de 'Pass by reference' -techniek gebruiken. Dit komt doordat we met deze techniek geen kopie van de parameters doorgeven, maar de referentie van de variabele zelf.
V # 19) Wat zijn standaardparameters? Hoe worden ze geëvalueerd in de C ++ -functie?
Antwoord: Standaardparameter is een waarde die aan elke parameter wordt toegewezen tijdens het declareren van een functie.
Deze waarde wordt gebruikt als die parameter leeg wordt gelaten tijdens het aanroepen van de functie. Om een standaardwaarde voor een bepaalde parameter op te geven, wijzen we eenvoudig een waarde toe aan de parameter in de functiedeclaratie.
Als de waarde voor deze parameter niet wordt doorgegeven tijdens de functieaanroep, gebruikt de compiler de opgegeven standaardwaarde. Als een waarde is opgegeven, wordt op deze standaardwaarde getrapt en wordt de doorgegeven waarde gebruikt.
Voorbeeld:
Uitgang:
12
6
Zoals te zien is in de bovenstaande code, zijn er twee oproepen voor de vermenigvuldigingsfunctie. Bij de eerste aanroep wordt slechts één parameter met een waarde doorgegeven. In dit geval is de tweede parameter de opgegeven standaardwaarde. Maar in de tweede aanroep wordt de standaardwaarde overschreven en wordt de doorgegeven waarde gebruikt, aangezien beide parameterwaarden worden doorgegeven.
V # 20) Wat is een inline-functie in C ++?
Antwoord: Inline-functie is een functie die wordt gecompileerd door de compiler als het punt waarop de functie wordt aangeroepen en de code wordt op dat punt vervangen. Dit maakt het compileren sneller. Deze functie wordt gedefinieerd door voor het functie-prototype het trefwoord 'inline' te plaatsen.
Dergelijke functies zijn alleen voordelig als de code van de inline-functie klein en eenvoudig is. Hoewel een functie is gedefinieerd als Inline, is deze volledig afhankelijk van de compiler om deze als inline te evalueren of niet.
Geavanceerde gegevensstructuur
Arrays
V # 21) Waarom worden arrays gewoonlijk verwerkt met for-lus?
Antwoord: Array gebruikt de index om elk van zijn elementen te doorlopen.
Als A een array is, wordt elk van zijn elementen benaderd als A (i). Programmatisch gezien is alles wat nodig is om dit te laten werken een iteratief blok met een lusvariabele i die dient als een index (teller) die oploopt van 0 tot A.lengte-1.
Dit is precies wat een lus doet en dit is de reden waarom we arrays verwerken met for-lussen.
Q # 22) Geef het verschil aan tussen verwijderen en verwijderen ().
Antwoord: 'Delete ()' wordt gebruikt om het geheugen vrij te geven dat is toegewezen aan een array die is toegewezen met nieuwe (). 'Delete' wordt gebruikt om een stuk geheugen vrij te geven dat is toegewezen met nieuw.
V # 23) Wat is er mis met deze code?
T * p = nieuwe T (10);
verwijder p;
Antwoord: De bovenstaande code is syntactisch correct en compileert prima.
Het enige probleem is dat het gewoon het eerste element van de array verwijdert. Hoewel de hele array wordt verwijderd, wordt alleen de destructor van het eerste element aangeroepen en wordt het geheugen voor het eerste element vrijgegeven.
Vraag 24) Wat is de volgorde waarin de objecten in een array worden vernietigd?
Antwoord: Objecten in een array worden vernietigd in de omgekeerde volgorde van constructie: eerst geconstrueerd, laatst vernietigd.
In het volgende voorbeeld de volgorde voor vernietigers zal een (9), een (8), ..., een (1), een (0) zijn:
Aanwijzers
V # 25) Wat is er mis met deze code?
T * p = 0;
verwijder p;
Antwoord: In de bovenstaande code is de aanwijzer een nul-aanwijzer. Volgens de C ++ 03-standaard is het perfect geldig om delete op een NULL-aanwijzer aan te roepen. De delete-operator zorgt intern voor de NULL-controle.
V # 26) Wat is een referentievariabele in C ++?
Antwoord: Een referentievariabele is een aliasnaam voor de bestaande variabele. Dit betekent dat zowel de variabelenaam als de referentievariabele naar dezelfde geheugenlocatie verwijzen. Daarom wordt elke keer dat de variabele wordt bijgewerkt, ook de referentie bijgewerkt.
Voorbeeld:
Hier is b de referentie van a.
Opslagklassen
V # 27) Wat is een opslagklasse? Noem de opslagklassen in C ++.
Antwoord: De opslagklasse bepaalt de levensduur of het bereik van symbolen zoals variabelen of functies.
C ++ ondersteunt de volgende opslagklassen:
- Auto
- Statisch
- Extern
- Registreren
- Veranderlijk
V # 28) Leg de specificatie van de veranderlijke opslagklasse uit.
Antwoord: De variabele van het lid van een constante klasseobject kan niet worden gewijzigd. Door de variabelen echter als 'veranderlijk' te verklaren, kunnen we de waarden van deze variabelen wijzigen.
V # 29) Waar is het trefwoord auto voor?
Antwoord: Standaard is elke lokale variabele van de functie automatisch, d.w.z. auto In de onderstaande functie zijn zowel de variabelen ‘i’ als ‘j’ automatische variabelen.
NOTITIE : Een globale variabele is geen automatische variabele.
V # 30) Wat is een statische variabele?
Antwoord: Een statische variabele is een lokale variabele die zijn waarde behoudt over de functieaanroepen. Statische variabelen worden gedeclareerd met het sleutelwoord 'statisch'. Numerieke variabelen die statisch zijn, hebben de standaardwaarde nul.
De volgende functie zal 1 2 3 afdrukken als deze driemaal wordt aangeroepen.
Als een globale variabele statisch is, is de zichtbaarheid ervan beperkt tot dezelfde broncode.
V # 31) Wat is het doel van de externe opslagspecificatie?
Antwoord: 'Externe' specificatie wordt gebruikt om het bereik van een globaal symbool op te lossen.
In de bovenstaande code kan 'i' zichtbaar zijn buiten het bestand waarin het is gedefinieerd.
V # 32) Leg de registeropslagspecificatie uit.
Antwoord: De variabele 'Register' moet worden gebruikt wanneer de variabele wordt gebruikt. Wanneer een variabele wordt gedeclareerd met een “register” -specificatie, geeft de compiler het CPU-register voor opslag om het opzoeken van de variabele te versnellen.
V # 33) Wanneer gebruik je 'const' referentieargumenten in een functie?
Antwoord: Het gebruik van 'const' -verwijzingsargumenten in een functie is op verschillende manieren nuttig:
- 'Const' beschermt tegen programmeerfouten die gegevens kunnen wijzigen.
- Als resultaat van het gebruik van 'const', kan de functie zowel const als niet-const werkelijke argumenten verwerken, wat niet mogelijk is als 'const' niet wordt gebruikt.
- Door een const-referentie te gebruiken, kan de functie een tijdelijke variabele op de juiste manier genereren en gebruiken.
Structuur en door de gebruiker gedefinieerde gegevenstypen
V # 34) Wat is een klas?
Antwoord: Klasse is een door de gebruiker gedefinieerd gegevenstype in C ++. Het kan worden gemaakt om een bepaald soort probleem op te lossen. Na het aanmaken hoeft de gebruiker de details van de werking van een klas niet te kennen.
Over het algemeen fungeert klasse als een blauwdruk van een project en kan deze verschillende parameters en functies of acties bevatten die op deze parameters werken. Dit worden de leden van de klas genoemd.
V # 35) Verschil tussen klasse en structuur.
Antwoord:
Structuur: In C-taal wordt de structuur gebruikt om verschillende soorten gegevenstypen samen te bundelen. De variabelen binnen een structuur worden de leden van de structuur genoemd. Deze leden zijn standaard openbaar en kunnen worden geopend met behulp van de structuurnaam gevolgd door een puntoperator en vervolgens de lidnaam.
Klasse: Class is een opvolger van de structuur. C ++ breidt de structuurdefinitie uit met de functies die op zijn leden werken. Standaard zijn alle leden in de klas privé.
Objectgeoriënteerd programmeren met C ++
Klassen, constructeurs, vernietigers
V # 36) Wat is naamruimte?
Antwoord: Namespace stelt ons in staat om een set globale klassen, objecten en / of functies onder een specifieke naam te groeperen.
De algemene vorm om naamruimten te gebruiken is:
naamruimte-ID {namespace-body}
Waar identifier een geldige identifier is en de namespace-body de set klassen, objecten en functies is die in de namespace zijn opgenomen. Naamruimten zijn vooral handig in het geval dat er een mogelijkheid is dat meer dan één object dezelfde naam heeft, wat resulteert in naamclashes.
V # 37) Wat is het gebruik van een ‘gebruikende’ verklaring?
Antwoord: Het gebruik van declaratie wordt gebruikt om een naam uit de naamruimte te verwijzen zonder de scope-oplossingsoperator.
V # 38) Wat is naamvervorming?
Antwoord: C ++ - compiler codeert de parametertypen met functie / methode in een unieke naam. Dit proces wordt naammangling genoemd. Het omgekeerde proces wordt ontklitten genoemd.
Voorbeeld:
A :: b (int, lang) const wordt verminkt als ‘B__C3Ail’
Voor een constructor wordt de naam van de methode weggelaten.
Dat is A :: A (int, lang) const wordt verminkt als 'C3Ail'.
V # 39) Wat is het verschil tussen een object en een klasse?
Antwoord: Klasse is een blauwdruk van een project of probleem dat moet worden opgelost en bestaat uit variabelen en methoden. Dit worden de leden van de klas genoemd. We hebben geen toegang tot methoden of variabelen van de klasse op zichzelf, tenzij ze statisch worden verklaard.
Om toegang te krijgen tot de klasleden en ze te gebruiken, moeten we een instantie van een klasse maken die een Object wordt genoemd. De klasse heeft een onbeperkte levensduur, terwijl een object slechts een beperkte levensduur heeft.
V # 40) Wat zijn de verschillende toegangsspecificaties in C ++?
Antwoord: C ++ ondersteunt de volgende toegangsspecificaties:
- Openbaar: Gegevensleden en functies zijn toegankelijk buiten de klas.
- Privaat: Gegevensleden en functies zijn niet toegankelijk buiten de klas. De uitzondering is het gebruik van een vriendenklasse.
- Beschermd: Gegevensleden en functies zijn alleen toegankelijk voor de afgeleide klassen.
Voorbeeld:
Beschrijf PRIVATE, BESCHERMD en PUBLIEK samen met hun verschillen en geef voorbeelden.
V # 41) Wat is een constructor en hoe heet het?
Antwoord: Constructor is een lidfunctie van de klasse met dezelfde naam als de klasse. Het wordt voornamelijk gebruikt om de leden van de klas te initialiseren. Constructors zijn standaard openbaar.
Er zijn twee manieren waarop de constructeurs worden aangeroepen:
- Impliciet: Constructors worden impliciet aangeroepen door de compiler wanneer een object van de klasse wordt gemaakt. Dit creëert een object op een stapel.
- Expliciet bellen: Wanneer het object van een klasse wordt gemaakt met new, worden constructors expliciet aangeroepen. Dit creëert meestal een object op een heap.
Voorbeeld:
V # 42) Wat is een COPY CONSTRUCTOR en wanneer wordt hij genoemd?
Antwoord: Een kopieerconstructor is een constructor die een object van dezelfde klasse als zijn parameter accepteert en zijn gegevensleden naar het object aan de linkerkant van de toewijzing kopieert. Het is handig wanneer we een nieuw object van dezelfde klasse moeten construeren.
Voorbeeld:
V # 43) Wat is een standaardconstructor?
Antwoord: De standaardconstructor is een constructor die geen argumenten heeft of, als die er zijn, allemaal standaardargumenten.
Voorbeeld:
V # 44) Wat is een conversieconstructor?
Antwoord: Het is een constructor die een argument van een ander type accepteert. Conversieconstructors worden voornamelijk gebruikt voor het converteren van het ene type naar het andere.
V # 45) Wat is een expliciete constructor?
Antwoord: Een conversieconstructor wordt gedeclareerd met het expliciete sleutelwoord. De compiler gebruikt geen expliciete constructor om een impliciete conversie van typen te implementeren. Het doel ervan is expliciet gereserveerd voor de bouw.
V # 46) Wat is de rol van het statische sleutelwoord voor een variabele van een klaslid?
Antwoord: De statische lidvariabele deelt een gemeenschappelijk geheugen voor alle objecten die voor de respectieve klasse zijn gemaakt. We hoeven niet met een object naar de statische lidvariabele te verwijzen. Het is echter toegankelijk via de klassenaam zelf.
V # 47) Leg de statische staaffunctie uit.
Antwoord: Een statische lidfunctie heeft alleen toegang tot de statische lidvariabele van de klasse. Net als de statische lidvariabelen, kan een statische lidfunctie ook worden geopend met behulp van de klassenaam.
V # 48) Wat is de volgorde waarin de lokale objecten worden vernietigd?
Antwoord: Overweeg een stukje code te volgen:
In de hoofdfunctie hebben we twee objecten na elkaar gemaakt. Ze worden op volgorde gemaakt, eerst a en dan b. Maar wanneer deze objecten worden verwijderd of als ze buiten het bereik vallen, wordt de destructor voor elk aangeroepen in de omgekeerde volgorde waarin ze zijn geconstrueerd.
Daarom wordt de destructor van b eerst genoemd, gevolgd door a. Zelfs als we een reeks objecten hebben, zullen ze op dezelfde manier worden vernietigd in de omgekeerde volgorde van hun creatie.
Overbelasting
V # 49) Leg de functie overbelasting en overbelasting van de operator uit.
Antwoord: C ++ ondersteunt het OOP-concept Polymorfisme, wat 'vele vormen' betekent.
In C ++ hebben we twee soorten polymorfisme, namelijk Compile-time polymorfisme en Run-time polymorfisme. Compilatietijd polymorfisme wordt bereikt door gebruik te maken van een overbelastingstechniek. Overbelasting betekent eenvoudigweg een entiteit extra betekenis geven door de basisbetekenis intact te houden.
C ++ ondersteunt twee soorten overbelasting:
Functie overbelasting:
Functie-overbelasting is een techniek waarmee de programmeur meer dan één functie met dezelfde naam maar met een andere parameterlijst kan hebben. Met andere woorden, we overladen de functie met verschillende argumenten, of het nu gaat om het type argumenten, het aantal argumenten of de volgorde van argumenten.
Functie-overbelasting wordt nooit bereikt op het retourtype.
Overbelasting door operator:
Dit is nog een ander type polymorfisme tijdens het compileren dat wordt ondersteund door C ++. Bij overbelasting van de operator wordt een operator overbelast, zodat deze zowel met de door de gebruiker gedefinieerde typen als met de operanden van het standaard datatype kan werken. Maar terwijl u dit doet, blijft de standaarddefinitie van die operator intact.
Bijvoorbeeld, een opteloperator (+) die werkt met numerieke gegevenstypen, kan worden overbelast om op twee objecten te werken, net als een object met een complexe getallenklasse.
V # 50) Wat is het verschil tussen Method Overloading en Method Overriding in C ++?
Antwoord: Overbelasting van methoden is het hebben van functies met dezelfde naam maar met verschillende argumentlijsten. Dit is een vorm van polymorfisme tijdens het compileren.
Het overschrijven van methoden komt in beeld wanneer we de methode herschrijven die is afgeleid van een basisklasse. Methode-overschrijving wordt gebruikt bij het omgaan met run-time polymorfisme of virtuele functies.
V # 51) Wat is het verschil tussen een Copy Constructor en een Overloaded Toewijzing Operator?
Antwoord: Een kopieerconstructor en een overbelaste toewijzingsoperator dienen in principe hetzelfde doel, namelijk het toewijzen van de inhoud van het ene object aan het andere. Maar toch is er een verschil tussen de twee.
Voorbeeld:
In het bovenstaande voorbeeld is de tweede instructie c1 = c2 een overbelaste toewijzingsinstructie.
Hier zijn zowel c1 als c2 reeds bestaande objecten en wordt de inhoud van c2 toegewezen aan het object c1. Daarom moeten voor een overbelaste toewijzingsinstructie beide objecten al zijn gemaakt.
De volgende verklaring, complex c3 = c2 is een voorbeeld van de kopieerconstructor. Hier wordt de inhoud van c2 toegewezen aan een nieuw object c3, wat betekent dat de kopieerconstructor elke keer dat het wordt uitgevoerd een nieuw object maakt.
V # 52) Noem de operators die niet kunnen worden overbelast.
Antwoord:
- sizeof - sizeof operator
- - Dot-operator
- . * - dereferentie-operator
- -> - operator voor het verwijderen van verwijzingen naar leden
- :: - scope resolutie operator
- ?: - voorwaardelijke operator
Q # 53) Functie kan worden overbelast op basis van de parameter die een waarde of een referentie is. Leg uit of de bewering waar is.
Antwoord: Vals. Zowel Passing by value als Passing by reference zien er hetzelfde uit als de beller.
V # 54) Wat zijn de voordelen van overbelasting door de operator?
Antwoord: Door standaardoperatoren op een klasse te overbelasten, kunnen we de betekenis van deze operatoren uitbreiden, zodat ze ook op de andere door de gebruiker gedefinieerde objecten kunnen werken.
Door overbelasting van functies kunnen we de complexiteit van de code verminderen en deze duidelijker en leesbaarder maken, omdat we dezelfde functienamen kunnen hebben met verschillende argumentlijsten.
Erfenis
V # 55) Wat is erfenis?
Antwoord: Overerving is een proces waarmee we de kenmerken van een bestaande entiteit kunnen verwerven en een nieuwe entiteit kunnen vormen door er meer functies aan toe te voegen.
In termen van C ++ is overerving het creëren van een nieuwe klasse door deze af te leiden van een bestaande klasse, zodat deze nieuwe klasse zowel de eigenschappen van zijn bovenliggende klasse als die van hemzelf heeft.
Q # 56) Wat zijn de voordelen van Inheritance?
Antwoord: Overerving maakt hergebruik van code mogelijk, waardoor tijd wordt bespaard op de ontwikkeling van code.
Door te erven, maken we gebruik van foutloze software van hoge kwaliteit die toekomstige problemen vermindert.
V # 57) Ondersteunt C ++ Multilevel en Multiple Inheritances?
Antwoord: Ja.
V # 58) Wat zijn meerdere erfenissen (virtuele overerving)? Wat zijn de voor- en nadelen?
Antwoord: In meerdere overervingen hebben we meer dan één basisklassen waarvan een afgeleide klasse kan erven. Daarom neemt een afgeleide klasse de kenmerken en eigenschappen van meer dan één basisklasse.
Bijvoorbeeld , een klas bestuurder heeft twee basisklassen namelijk, werknemer en een persoon omdat een chauffeur zowel een werknemer als een persoon is. Dit is voordelig omdat de chauffeursklasse zowel de eigenschappen van de werknemer als de persoonsklasse kan erven.
Maar in het geval van een werknemer en een persoon, heeft de klas enkele eigenschappen gemeen. Er zal echter een dubbelzinnige situatie ontstaan, aangezien de stuurprogrammaklasse niet de klassen kent waarvan de gemeenschappelijke eigenschappen moeten worden overgenomen. Dit is het grootste nadeel van meerdere erfenissen.
V # 59) Leg de klassenrelaties tussen ISA en HASA uit. Hoe zou je implementeren elk?
Antwoord: 'ISA' -relatie vertoont gewoonlijk overerving aangezien het impliceert dat een klasse 'ISA' gespecialiseerde versie van een andere klasse is. Bijvoorbeeld Een werknemer ISA-persoon. Dat betekent dat een klasse Employee wordt geërfd van de klasse Person.
In tegenstelling tot 'ISA', geeft de 'HASA' -relatie weer dat een entiteit een andere entiteit als lid kan hebben of dat een klasse een ander object erin heeft ingebed.
Dus als we hetzelfde voorbeeld nemen van een Werknemersklasse, associëren we de Salarisklasse met de werknemer niet door deze te erven, maar door het Salarisobject op te nemen of te bevatten binnen de Werknemersklasse. 'HASA' -relatie komt het best tot uiting door insluiting of aggregatie.
V # 60) Erft een afgeleide klasse of vererft hij niet?
Antwoord: Wanneer een afgeleide klasse is opgebouwd uit een bepaalde basisklasse, erft deze in feite alle kenmerken en gewone leden van de basisklasse. Maar er zijn enkele uitzonderingen op deze regel. Een afgeleide klasse erft bijvoorbeeld de constructors en destructors van de basisklasse niet.
Elke klasse heeft zijn eigen constructeurs en vernietigers. De afgeleide klasse erft ook niet de toewijzingsoperator van de basisklasse en vrienden van de klasse. De reden is dat deze entiteiten specifiek zijn voor een bepaalde klasse en als een andere klasse wordt afgeleid of als het de vriend van die klasse is, kunnen ze niet aan hen worden doorgegeven.
Polymorfisme
V # 61) Wat is polymorfisme?
Antwoord: Het basisidee achter polymorfisme is in vele vormen. In C ++ hebben we twee soorten polymorfisme:
(i) Compile-time polymorfisme
Bij het compileren van polymorfisme bereiken we vele vormen door overbelasting. Daarom hebben we een overbelasting van de operator en een overbelasting van de functie. (We hebben dit hierboven al behandeld)
(ii) Runtime-polymorfisme
Dit is het polymorfisme voor klassen en objecten. Algemeen idee is dat een basisklasse kan worden overgeërfd door meerdere klassen. Een basisklasse-aanwijzer kan naar zijn onderliggende klasse verwijzen en een basisklasse-array kan verschillende onderliggende klasse-objecten opslaan.
Dit betekent dat een object anders reageert op dezelfde functieaanroep. Dit type polymorfisme kan een virtueel functiemechanisme gebruiken.
V # 62) Wat zijn virtuele functies?
Antwoord: Een virtuele functie stelt de afgeleide klassen in staat de implementatie van de basisklasse te vervangen.
Telkens wanneer we functies hebben met dezelfde naam in zowel de basisklasse als de afgeleide klasse, ontstaat er een dubbelzinnigheid wanneer we proberen toegang te krijgen tot het onderliggende klasseobject met behulp van een basisklasse-pointer. Omdat we een basisklasse-aanwijzer gebruiken, is de functie die wordt aangeroepen de basisklasse-functie met dezelfde naam.
Om deze dubbelzinnigheid te corrigeren gebruiken we het sleutelwoord “virtual” vóór het functie-prototype in de basisklasse. Met andere woorden, we maken deze polymorfe functie Virtueel. Door een virtuele functie te gebruiken, kunnen we de dubbelzinnigheid verwijderen en hebben we correct toegang tot alle functies van de kindklasse met behulp van een basisklasse-aanwijzer.
Q # 63) Geef een voorbeeld van run-time polymorfisme / virtuele functies.
Antwoord:
In de bovenstaande code heeft de SHAPE-klasse een pure virtuele functie en is het een abstracte klasse (kan niet worden geïnstantieerd). Elke klasse is afgeleid van SHAPE die de functie Draw () op zijn eigen manier implementeert.
Verder is elke Draw-functie virtueel, zodat wanneer we elke keer een basisklasse-pointer (SHAPE) gebruiken met het object van de afgeleide klassen (Circle en SQUARE), de juiste Draw-functies worden aangeroepen.
V # 64) Wat bedoel je met Pure Virtual Functions?
Antwoord: Een Pure Virtual Member-functie is een lidfunctie waarin de basisklasse de afgeleide klassen dwingt te overschrijven. Normaal gesproken heeft deze lidfunctie geen implementatie. Pure virtuele functies worden gelijkgesteld aan nul.
Voorbeeld:
Een basisklasse die een pure virtuele functie heeft als lid, kan worden aangeduid als een 'abstracte klasse'. Deze klasse kan niet worden geïnstantieerd en fungeert meestal als een blauwdruk met verschillende subklassen met verdere implementatie.
V # 65) Wat zijn virtuele constructeurs / vernietigers?
Antwoord:
Virtuele vernietigers: Wanneer we een basisklasse-pointer gebruiken die naar een afgeleid klasseobject wijst en deze gebruiken om het te vernietigen, wordt in plaats van de afgeleide klasse-destructor aangeroepen, de basisklasse-destructor aangeroepen.
Voorbeeld:
Zoals in het bovenstaande voorbeeld wordt getoond, wordt de destructor aangeroepen als we delete a zeggen, maar het is eigenlijk de destructor van de basisklasse. Dit geeft aanleiding tot de dubbelzinnigheid dat al het geheugen van b niet goed zal worden gewist.
Dit probleem kan worden opgelost door gebruik te maken van het 'Virtual Destructor' -concept.
Wat we doen is, we maken de constructor van de basisklasse 'Virtueel' zodat alle destructors van de onderliggende klassen ook virtueel worden en wanneer we het object van de basisklasse verwijderen dat naar het object van de afgeleide klasse verwijst, wordt de juiste destructor aangeroepen. de objecten zijn correct verwijderd.
Dit wordt als volgt weergegeven:
core java interviewvragen en antwoorden voor eerstejaarsstudenten
Virtuele bouwer : Constructeurs kunnen niet virtueel zijn. Het declareren van een constructor als een virtuele functie is een syntaxisfout.
Vriend
Q # 66) Wat is een vriendenfunctie?
Antwoord: De klasse C ++ staat niet toe dat zijn privé- en beschermde leden buiten de klasse worden benaderd. Maar deze regel kan worden overtreden door gebruik te maken van de ' Vriend ”Functie.
Zoals de naam zelf suggereert, is de vriendfunctie een externe functie die een vriend van de klas is. Om de vriendfunctie toegang te geven tot de privé- en beschermde methoden van de klas, zouden we een prototype van de vriendfunctie moeten hebben met het sleutelwoord 'vriend' in de klas.
V # 67) Wat is een vriendenklas?
Antwoord: Vriendklassen worden gebruikt wanneer we de regel voor persoonlijke en beschermde toegangsspecificaties moeten overschrijven, zodat twee klassen nauw met elkaar kunnen samenwerken.
Daarom kunnen we een vriendenklas hebben om een vriend van een andere klas te zijn. Op deze manier kunnen vriendenklassen privé, ontoegankelijke dingen houden zoals ze zijn.
Wanneer we een vereiste hebben om toegang te krijgen tot de interne implementatie van een klas (privélid) zonder de details openbaar te maken, gaan we voor vriendenfuncties.
Geavanceerde C ++
Sjablonen
Q # 68) Wat is een sjabloon?
Antwoord: Sjablonen maken het mogelijk om functies te maken die onafhankelijk zijn van het gegevenstype (generiek) en elk gegevenstype als parameters en retourwaarde kunnen aannemen zonder de functie te overladen met alle mogelijke gegevenstypen. Sjablonen vervullen bijna de functionaliteit van een macro.
Het prototype is een van de volgende:
sjabloon
sjabloon
Het enige verschil tussen beide prototypes is het gebruik van trefwoordklasse of typenaam. Hun basisfunctionaliteit om generiek te zijn, blijft hetzelfde.
Afhandeling van uitzonderingen
V # 69) Wat is het afhandelen van uitzonderingen? Ondersteunt C ++ het afhandelen van uitzonderingen?
Antwoord: Ja, C ++ ondersteunt het afhandelen van uitzonderingen.
We kunnen er niet voor zorgen dat de code altijd normaal wordt uitgevoerd. Er kunnen bepaalde situaties zijn die ertoe kunnen leiden dat de door ons geschreven code defect raakt, ook al is deze foutloos. Deze storing van de code wordt genoemd Uitzondering
Als er een uitzondering is opgetreden, moet de compiler deze gooien zodat we weten dat er een uitzondering is opgetreden. Als er een uitzondering is gegenereerd, moet de compiler ervoor zorgen dat deze correct wordt afgehandeld, zodat de programmastroom doorgaat of correct wordt beëindigd. Dit heet de afhandeling van een uitzondering.
Dus in C ++ hebben we drie trefwoorden, d.w.z. proberen werpen en vangst die in de afhandeling van uitzonderingen zijn.
De algemene syntaxis voor uitzonderingsblok is:
Zoals hierboven getoond, wordt de code die mogelijk niet goed werkt onder het try-blok geplaatst. Wanneer de code niet goed werkt, wordt er een uitzondering gegenereerd. Deze uitzondering wordt vervolgens onder het vangblok opgevangen en afgehandeld, d.w.z. dat er passende maatregelen worden genomen.
V # 70) Commentaar op standaarduitzonderingen voor C ++?
Antwoord: C ++ ondersteunt enkele standaarduitzonderingen die kunnen worden opgevangen als we de code in het try-blok plaatsen. Deze uitzonderingen maken deel uit van de basisklasse ' std :: exception ”. Deze klasse is gedefinieerd in het C ++ header-bestand.
Enkele voorbeelden van uitzonderingen die door deze klasse worden ondersteund, zijn:
bad_alloc - gegooid door ‘nieuw’
runtime_error - gegenereerd voor runtime-fouten
bad_typeid - gegenereerd door type id
Inleiding tot standaard sjabloonbibliotheek
V # 71) Wat is een standaard sjabloonbibliotheek (STL)? Wat zijn de verschillende soorten STL-containers?
Antwoord: Een Standard Template Library (STL) is een bibliotheek met containersjablonen die door de ANSI-commissie zijn goedgekeurd voor opname in de standaard C ++ -specificatie. We hebben verschillende soorten STL-containers, afhankelijk van hoe ze de elementen opslaan.
- Wachtrij, stapel - Deze zijn hetzelfde als traditionele wachtrij en stapel en worden adaptieve containers genoemd.
- Set, kaart - Dit zijn in feite containers die sleutel / waarde-paren hebben en die associatief van aard zijn.
- Vector en - Deze zijn opeenvolgend van aard en hebben overeenkomsten met arrays.
Q # 72) Wat is een Iterator-klasse?
Antwoord: In C ++ is een containerklasse een verzameling verschillende objecten.
Als we door deze verzameling objecten moeten lopen, kunnen we dit niet doen met eenvoudige indexvariabelen. Daarom hebben we een speciale klasse in STL genaamd an Iterator class die kan worden gebruikt om door de inhoud van de containerklasse te stappen.
De verschillende categorieën iteratoren omvatten input iterators, output iterators, forward iterators, bidirectionele iterators, willekeurige toegang, etc.
V # 73) Wat is het verschil tussen een externe iterator en een interne iterator? Beschrijf een voordeel van de externe iterator.
Antwoord: Een interne iterator wordt geïmplementeerd met lidfuncties van de klasse die items heeft om doorheen te stappen.
Een externe iterator wordt geïmplementeerd als een aparte klasse die kan worden gebonden aan het object dat items heeft om doorheen te stappen. Het basisvoordeel van een externe iterator is dat deze eenvoudig te implementeren is omdat deze als een aparte klasse wordt geïmplementeerd.
Ten tweede, omdat het een andere klasse is, kunnen veel iteratorobjecten tegelijkertijd actief zijn.
Verder lezen => C # Interviewvragen
Gevolgtrekking
Bijna alle belangrijke coderings- en programmeeronderwerpen van C ++ -interview worden in dit artikel behandeld.
We hopen dat elke kandidaat zich ontspannen zal voelen na het voorbereiden van een interview met behulp van deze reeks interviewvragen.
Het allerbeste voor uw interview !!
Aanbevolen literatuur
- Interview vragen en antwoorden
- Vragen en antwoorden over ETL-tests
- Enkele lastige vragen en antwoorden voor handmatig testen
- 25 Beste Agile Testing Interview Vragen en Antwoorden
- Spock-interviewvragen met antwoorden (meest populair)
- Enkele interessante sollicitatievragen voor het testen van software
- Top 20+ .NET interviewvragen en antwoorden
- Top 32 beste datastage interviewvragen en antwoorden