logo

Fragen und Antworten zum C++-Interview (2024)

C++ – die bekannteste und beliebteste Programmiersprache aller Programmierer. Es ist immer noch aktuell wie Mitte der 80er Jahre. Da es sich um eine universelle und objektorientierte Programmiersprache handelt, wird sie vor allem beim Codieren häufig eingesetzt. Daher erfordern einige Stellen, dass die Mitarbeiter fließend C++ beherrschen. Es wird von führenden IT-Unternehmen wie verwendet Evernote, LinkedIn, Microsoft, Opera, NASA , Und Meta aufgrund seiner Zuverlässigkeit, Leistung und seines breiten Einsatzspektrums. Um in diese Unternehmen einzusteigen, müssen Sie also gründlich darin sein Die 50 wichtigsten C++-Interviewfragen Dadurch können Sie vor Personalvermittlern wie ein Experte erscheinen.

Die 50 besten C++-Interviewfragen für Erstsemester und Erfahrene (2022)

Um Sie auf das Vorstellungsgespräch vorzubereiten, haben wir das mitgebracht Die 50 besten C++-Interviewfragen für Anfänger, Fortgeschrittene und Erfahrene die Sie unbedingt durchlaufen müssen, um bei den Top-MNCs platziert zu werden.

C++-Interviewfragen für Erstsemester

1. Was ist C++? Was sind die Vorteile von C++?

C++ ist eine objektorientierte Programmiersprache, die eingeführt wurde, um die Bereiche zu überwinden, in denen C fehlte. Mit objektorientiert meinen wir, dass es mit dem Konzept von arbeitet Polymorphismus , Nachlass , Abstraktion , Verkapselung , Objekt und Klasse .



Vorteile von C++ :

  1. C++ ist eine OOP-Sprache, was bedeutet, dass die Daten als Objekte betrachtet werden.
  2. C++ ist eine Multiparadigmensprache; Vereinfacht ausgedrückt bedeutet dies, dass wir die Logik, Struktur und Vorgehensweise des Programms programmieren können.
  3. Die Speicherverwaltung ist eine Schlüsselfunktion in C++, da sie eine dynamische Speicherzuweisung ermöglicht
  4. Es handelt sich um eine Programmiersprache auf mittlerem Niveau, was bedeutet, dass sie Spiele, Desktop-Anwendungen, Treiber und Kernel entwickeln kann

Weitere Informationen finden Sie im Artikel – Was sind die Vorteile von C++?

2. Welche verschiedenen Datentypen gibt es in C++?

Datentypen in C++

Verschiedene Arten von Datentypen in C++

Weitere Informationen finden Sie unter ' Standard’ wird auch als Standard bezeichnet oder kann als Namespace interpretiert werden. Der Befehl Verwenden des Namensraums std weist den Compiler an, alles unter dem hinzuzufügen std-Namespace und ihnen das beibringen globaler Namensraum . Die Nutzung dieses globalen Namensraums kommt uns zugute cout Und Essen ohne zu benutzen std::_operator_.

Weitere Informationen finden Sie unter Namespace und std .

4. Was sind Referenzen in C++?

Wenn eine Variable als Referenz beschrieben wird, wird sie zu einem Alias ​​der bereits vorhandenen Variablen. Einfach ausgedrückt ist eine referenzierte Variable eine weitere benannte Variable einer vorhandenen Variablen. Dabei ist zu berücksichtigen, dass an der Referenzvariablen vorgenommene Änderungen in der bereits vorhandenen Variablen widergespiegelt werden. Einer Referenzvariablen wird ein vorangestellt '&' Symbol.

Syntax:

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

Weitere Informationen finden Sie unter Referenzen in C++

5. Was meinen Sie mit „Call by Value“ und „Call by Reference“?

In dieser Programmiersprache gibt es zum Aufrufen einer Funktion zwei Methoden: Aufruf nach Wert Und Aufruf per Referenz

Aufruf nach Wert

Aufruf per Referenz

Es wird eine Kopie einer Variablen übergeben.Grundsätzlich wird eine Variable selbst übergeben.
Aufrufen einer Funktion durch Senden der Werte durch Kopieren von Variablen.Aufrufen einer Funktion durch Senden der Adresse der übergebenen Variablen.
Die in der Funktion vorgenommenen Änderungen werden niemals außerhalb der Funktion in der Variablen widergespiegelt. Kurz gesagt, der ursprüngliche Wert wird in Call by Value nie geändert.Die in den Funktionen vorgenommenen Änderungen sind außerhalb der Funktion an der übergebenen Funktion sichtbar. Kurz gesagt, der ursprüngliche Wert wird in Call by Reference geändert.
Übergebene Aktual- und Formalparameter werden an unterschiedlichen Speicherorten abgelegt. Daher ist bei Call by Value der Speicher etwas unzureichendÜbergebene Aktual- und Formalparameter werden am gleichen Speicherort abgelegt. Dadurch wird Call by Reference etwas speichereffizienter.

Weitere Informationen finden Sie unter der Unterschied zwischen Call-by-Value und Call-by-Reference

6. Definieren Sie das Token in C++

Ein Token ist das kleinste einzelne Element eines Programms, das von einem Compiler verstanden wird. Ein Token besteht aus Folgendem:

  1. Schlüsselwörter – Das hat für den Compiler eine besondere Bedeutung
  2. Identifikatoren – Die einen einzigartigen Wert/eine einzigartige Identität haben
  3. Konstanten – Das ändert während des gesamten Programms nie ihren Wert
  4. Saiten – Das enthält die homogene Datenfolge
  5. Spezielle Symbole – Sie haben eine besondere Bedeutung und können nicht für einen anderen Zweck verwendet werden; z.B: [] () {}, ; * = #
  6. Betreiber – Wer Operationen am Operanden durchführt

Weitere Informationen finden Sie unter Tokens in C++

7. Was ist der Unterschied zwischen C und C++?

C

C++

Es handelt sich um eine prozedurale Programmiersprache. Mit einfachen Worten: Es werden keine Klassen und Objekte unterstütztEs ist eine Mischung aus prozeduralen und objektorientierten Programmiersprachen. Mit einfachen Worten: Es unterstützt Klassen und Objekte.
Es unterstützt keine OOPs-Konzepte wie Polymorphismus, Datenabstraktion, Kapselung, Klassen und Objekte.Es unterstützt alle Datenkonzepte
Das Überladen von Funktionen und Operatoren wird nicht unterstütztEs unterstützt das Überladen von Funktionen und Operatoren
Es ist eine funktionsgesteuerte SpracheEs ist eine objektgesteuerte Sprache

Weitere Informationen finden Sie unter Unterschied zwischen C und C++

8. Was ist der Unterschied zwischen Struktur und Klasse?

Struktur

Klasse

Mitglieder der Struktur befinden sich standardmäßig immer im öffentlichen ModusMitglieder der Klasse können sich im privaten, geschützten und öffentlichen Modus befinden.
Strukturen sind vom Typ Wert. Sie haben nur im Gedächtnis einen Wert.Klassen sind vom Referenztyp. Es enthält eine Referenz eines Objekts im Speicher.
Der Speicher in Strukturen wird als Stapel gespeichertDer Speicher in Klassen wird als Heaps gespeichert.

Weitere Informationen finden Sie im Unterschied zwischen Struktur und Klasse.

9. Was ist der Unterschied zwischen Referenz und Zeiger?

Referenz

Anordnungsliste

Zeiger

Der Wert einer Referenz kann nicht neu zugewiesen werdenDer Wert eines Zeigers kann neu zugewiesen werden
Es kann niemals einen halten Null Wert, da ein vorhandener Wert erforderlich ist, um ein Alias ​​zu werdenEs kann einen halten oder darauf zeigen Null Wert und wird als bezeichnet nullptr oder Null Zeiger
Es kann nicht mit Arrays funktionierenEs kann mit Arrays arbeiten
Um auf die Mitglieder der Klasse/Struktur zuzugreifen, wird ein „ . 'Um auf die Mitglieder der Klasse/Struktur zuzugreifen, wird ein „ -> '
Auf den Speicherort der Referenz kann einfach zugegriffen werden oder er kann direkt verwendet werdenAuf den Speicherort eines Zeigers kann nicht einfach zugegriffen werden, da wir eine Dereferenzierung verwenden müssen. * '

Weitere Informationen finden Sie im Unterschied zwischen Referenz und Zeiger

10. Was ist der Unterschied zwischen Funktionsüberladung und Operatorüberladung?

Funktionsüberladung

Überlastung des Bedieners

Im Grunde geht es darum, eine Funktion auf vielfältige Weise zu definieren, sodass es viele Möglichkeiten gibt, sie aufzurufen, oder einfacher ausgedrückt: Sie haben mehrere Versionen derselben FunktionIm Grunde geht es darum, der bestehenden Bedeutung eines Operators eine besondere Bedeutung zu geben oder, vereinfacht ausgedrückt, die vorab neu definierte Bedeutung neu zu definieren
Parametrisierte Funktionen sind ein gutes Beispiel für Funktionsüberladung, da Sie durch einfaches Ändern des Arguments oder Parameters einer Funktion diese für verschiedene Zwecke nützlich machenPolymorphismus ist ein gutes Beispiel für eine Operatorüberladung, da ein Objekt einer Zuordnungsklasse von verschiedenen Klassen für unterschiedliche Zwecke verwendet und aufgerufen werden kann

Beispiel für Funktionsüberladung:

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

Beispiel für eine Operatorüberlastung:

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

Weitere Informationen finden Sie unter Überlastung des Bedieners Und Funktionsüberladung

11. Was ist der Unterschied zwischen einem Array und einer Liste?

Arrays

Listen

Arrays sind zusammenhängende Speicherorte homogener Datentypen, die an einem festen Ort oder in einer festen Größe gespeichert sind.Listen sind klassische Einzelelemente, die mit Hilfe von Zeigern miteinander verknüpft bzw. verbunden werden und keine feste Größe haben.
Arrays sind statischer Natur.Listen sind dynamischer Natur
Benötigt weniger Speicher als verknüpfte Listen.Benötigt mehr Speicher, da der Wert und der Zeigerspeicherort gespeichert werden müssen

Weitere Informationen finden Sie unter Arrays vs. Liste

12. Was ist der Unterschied zwischen einer While-Schleife und einer Do-While-Schleife?

While-Schleife

100 km/h in mph

do-while-Schleife

While-Schleife wird auch als eintrittsgesteuerte Schleife bezeichnetDie Do-While-Schleife wird als Exit-Regelschleife bezeichnet
Wenn die Bedingung nicht erfüllt ist, werden die Anweisungen innerhalb der Schleife nicht ausgeführtAuch wenn die Bedingung nicht erfüllt ist, werden die Anweisungen innerhalb der Schleife mindestens einmal ausgeführt

Beispiel einer while-Schleife:

while(Bedingung)

{auszuführende Anweisungen;};

Beispiel einer Do-While-Schleife:

Tun {

auszuführende Anweisungen;

} while(condition or expression);

Weitere Informationen finden Sie im Unterschied zwischen while- und do-while-Schleife

13. Diskutieren Sie den Unterschied zwischen Präfix und Postfix?

Präfix

Postfix

Es bedeutet einfach, den Operator vor den Operanden zu stellenEs bedeutet einfach, den Operator nach dem Operanden einzufügen
Es führt sich vorher selbst aus '; ' Es führt sich danach selbst aus '; '
Die Assoziativität des Präfixes ++ erfolgt von rechts nach linksDie Assoziativität von Postfix ++ ist von links nach rechts

Weitere Informationen finden Sie im Unterschied zwischen Präfix und Postfix

14. Was ist der Unterschied zwischen new und malloc()?

neu

malloc()

new ist ein Operator, der eine Operation ausführtmalloc ist eine Funktion, die Werte zurückgibt und akzeptiert
new ruft die Konstruktoren aufmalloc kann keinen Konstruktor aufrufen
new ist schneller als malloc, da es ein Operator istmalloc ist langsamer als new, da es eine Funktion ist
new gibt den genauen Datentyp zurückmalloc gibt void* zurück

Weitere Informationen finden Sie unter Unterschied zwischen new und malloc()

15. Was ist der Unterschied zwischen virtuellen Funktionen und rein virtuellen Funktionen?

Virtuelle Funktion

Rein virtuelle Funktion

Eine virtuelle Funktion ist eine Mitgliedsfunktion einer Basisklasse, die in einer anderen abgeleiteten Klasse neu definiert werden kann.Eine reine virtuelle Funktion ist eine Mitgliedsfunktion einer Basisklasse, die nur in einer Basisklasse deklariert und in einer abgeleiteten Klasse definiert wird, um zu verhindern, dass sie zu einer abstrakten Klasse wird.
Eine virtuelle Funktion hat ihre Definition in ihrer jeweiligen Basisklasse.In Pure Virtual Function gibt es keine Definition und wird mit einem reinen Spezifizierer initialisiert (= 0).
Die Basisklasse verfügt über eine virtuelle Funktion, die dargestellt oder instanziiert werden kann; Mit einfachen Worten: Sein Objekt kann gemacht werden.Eine Basisklasse mit rein virtueller Funktion wird abstrakt und kann nicht dargestellt oder instanziiert werden. In einfachen Worten bedeutet es, dass sein Objekt nicht hergestellt werden kann.

Weitere Informationen finden Sie im Unterschied zwischen virtuellen Funktionen und rein virtuellen Funktionen

16. Was sind Klassen und Objekte in C++?

Eine Klasse ist ein benutzerdefinierter Datentyp, bei dem alle Mitgliedsfunktionen und Datenmitglieder entsprechend den Anforderungen und Anforderungen maßgeschneidert sind und auf die alle mit Hilfe einer zugegriffen werden kann Objekt . Um einen benutzerdefinierten Datentyp zu deklarieren, verwenden wir ein Schlüsselwort Klasse.

Ein Objekt ist eine Instanz einer Klasse und einer Entität mit Wert und Zustand; Vereinfacht ausgedrückt wird es als Katalysator oder zur Darstellung eines Klassenmitglieds verwendet. Es kann verschiedene oder keine Parameter enthalten.

Notiz: Eine Klasse ist ein Bauplan, der Funktionen definiert, die von einem Objekt verwendet werden.

Weitere Informationen finden Sie hier Was sind Klassen und Objekte?

17. Was ist Funktionsüberschreibung?

Wenn eine Funktion mit demselben Namen, denselben Argumenten oder Parametern und demselben Rückgabetyp, die bereits in der Basisklasse vorhanden/deklariert ist, in einer abgeleiteten Klasse verwendet wird, spricht man von Funktionsüberschreibung. Es handelt sich um ein Beispiel für Laufzeitpolymorphismus oder Late Binding, was bedeutet, dass die überschriebene Funktion zur Laufzeit der Ausführung ausgeführt wird.

Weitere Informationen finden Sie unter Funktionsüberschreibung in C++

18. Was sind die verschiedenen OOPs-Konzepte in C++?

  • Klassen : Es handelt sich um einen benutzerdefinierten Datentyp
  • Objekte : Es ist eine Instanz einer Klasse
  • Abstraktion: Es handelt sich um eine Technik, bei der nur notwendige Details angezeigt werden
  • Verkapselung: Verpacken von Daten in einer einzigen Einheit
  • Nachlass: Die Fähigkeit einer Klasse, Eigenschaften und Merkmale von einer anderen Klasse abzuleiten
  • Polymorphismus: Als Polymorphismus bezeichnet man viele Formen derselben Sache

Weitere Informationen finden Sie unter Verschiedene OOPs-Konzepte in C++

19. Erklären Sie die Vererbung

Die Fähigkeit oder Fähigkeit einer Klasse, Eigenschaften und Merkmale von einer anderen Klasse abzuleiten, wird als Vererbung bezeichnet. Einfach ausgedrückt handelt es sich um ein System oder eine Technik zur Wiederverwendung und Erweiterung vorhandener Klassen, ohne sie zu ändern.

Weitere Informationen finden Sie unter Nachlass

20. Wann sollten wir Mehrfachvererbung verwenden?

Mehrfachvererbungen bedeuten, dass eine abgeleitete Klasse zwei oder mehr Basis-/Elternklassen erben kann. Dies ist nützlich, wenn eine abgeleitete Klasse zahlreiche Attribute/Verträge kombinieren und einen Teil oder die gesamte Implementierung von diesen Attributen/Verträgen erben muss. Um ein Beispiel aus dem wirklichen Leben zu nehmen, stellen Sie sich Ihre Eltern vor, bei denen Elternteil A Ihr Vater, Elternteil B Ihre Mutter und Kind C Sie sind.

mehrere Erbschaften

Mehrere Erbschaften

Weitere Informationen finden Sie unter Mehrfachvererbung .

21. Was ist virtuelle Vererbung?

Virtuelle Vererbung ist eine Technik, die sicherstellt, dass nur eine Kopie der Mitgliedsvariablen einer Basisklasse von von Enkeln abgeleiteten Klassen geerbt wird. Oder einfacher ausgedrückt: Virtuelle Vererbung wird verwendet, wenn wir es mit einer Situation mit mehreren Vererbungen zu tun haben, aber verhindern möchten, dass mehrere Instanzen derselben Klasse in der Vererbungshierarchie erscheinen.

22. Was ist Polymorphismus in C++?

Als Polymorphismus bezeichnet man viele Formen derselben Sache. In einfachen Worten können wir sagen, dass Polymorphismus die Fähigkeit ist, eine Mitgliedsfunktion in mehreren Formen anzuzeigen, abhängig von der Art des Objekts, das sie aufruft.

Mit anderen Worten können wir auch sagen, dass ein Mann ein Angestellter von jemandem, ein Sohn von jemandem, ein Vater von jemandem und ein Ehemann von jemandem sein kann; So kann Polymorphismus im wirklichen Leben projiziert werden.

Wie viele Städte gibt es in den USA?

Es gibt zwei Arten von Polymorphismus:

  1. Kompilierzeitpolymorphismus
    • Funktionsüberladung
    • Überlastung des Bedieners
  2. Laufzeitpolymorphismus
    • Funktionsüberschreibung
    • Virtuelle Funktion

Weitere Informationen finden Sie unter Polymorphismus

23. Welche verschiedenen Arten von Polymorphismus gibt es in C++?

Es gibt zwei Arten von Polymorphismus

Kompilierzeitpolymorphismus oder statische Bindung

Diese Art von Polymorphismus wird während der Kompilierungszeit des Programms erreicht, was dazu führt, dass es etwas schneller als die Laufzeit ist. Auch die Vererbung ist daran nicht beteiligt. Es besteht aus 2 weitere Techniken :

Funktionsüberladung: Wenn es mehrere Funktionen mit demselben Namen, aber unterschiedlichen Parametern gibt, spricht man von Funktionsüberladung.

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


Überlastung des Bedieners: Im Grunde geht es darum, der bestehenden Bedeutung eines Operators eine besondere Bedeutung zu geben oder, vereinfacht ausgedrückt, die vorab neu definierte Bedeutung neu zu definieren

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

Laufzeitpolymorphismus oder späte Bindung

Laufzeitpolymorphismus tritt auf, wenn Funktionen während der Laufzeit aufgerufen werden.

Funktionsüberschreibung: Eine Funktionsüberschreibung tritt auf, wenn eine Mitgliedsfunktion einer Basisklasse in einer abgeleiteten Klasse mit denselben Argumenten und demselben Rückgabetyp neu definiert wird.

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

Ausgabe:

Function of derived class>

Weitere Informationen finden Sie unter Verschiedene Arten von Polymorphismus

24. Vergleichen Sie den Polymorphismus zur Kompilierungszeit und den Polymorphismus zur Laufzeit

Polymorphismus zur Kompilierungszeit

Laufzeitpolymorphismus

Es wird auch als statische Bindung und frühe Bindung bezeichnet.Es wird auch als dynamische Bindung und späte Bindung bezeichnet.
Es ist schnell, da die Ausführung bereits zum Zeitpunkt der Kompilierung bekannt ist.Im Vergleich zur Kompilierungszeit ist es langsam, da die Ausführung zur Laufzeit bekannt ist.
Dies wird durch Funktionsüberlastung und Bedienerüberlastung erreicht.Dies wird durch virtuelle Funktionen und Funktionsüberschreibung erreicht.

Weitere Informationen finden Sie unter Polymorphismus zur Kompilierungszeit und Laufzeitpolymorphismus

25. Erklären Sie den Konstruktor in C++.

Ein Konstruktor ist eine spezielle Art von Mitgliedsfunktion einer Klasse, deren Name mit dem Namen der Klasse übereinstimmt, von der er aufgerufen wird, und der den Wert für das Objekt einer Klasse initialisiert.

Es gibt 3 Arten von Konstruktoren:

A. Standardkonstruktor: Es handelt sich um den grundlegendsten Konstruktortyp, der keine Argumente oder Parameter akzeptiert. Auch wenn es nicht aufgerufen wird, ruft der Compiler es automatisch auf, wenn ein Objekt erstellt wird.

Beispiel:

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


B. Parametrisierter Konstruktor: Es handelt sich um eine Art Konstruktor, der Argumente oder Parameter akzeptiert. Es muss explizit aufgerufen werden, indem Werte in den Argumenten übergeben werden, da diese Argumente dabei helfen, ein Objekt zu initialisieren, wenn es erstellt wird. Es hat auch den gleichen Namen wie die Klasse.

Außerdem wird es zum Überladen von Konstruktoren verwendet.

Beispiel:

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

Ausgabe

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

C. Konstruktor kopieren: Ein Kopierkonstruktor ist eine Memberfunktion, die ein Objekt mithilfe eines anderen Objekts derselben Klasse initialisiert. Außerdem akzeptiert der Copy-Konstruktor einen Verweis auf ein Objekt derselben Klasse als Argument.

Beispiel:

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


Weitere Informationen finden Sie unter Konstrukteure

26. Was sind Destruktoren in C++?

Destruktoren sind Mitglieder von Funktionen in einer Klasse, die ein Objekt löschen, wenn ein Objekt der Klasse den Gültigkeitsbereich verlässt. Destruktoren haben denselben Namen wie die Klasse, dem ein Tildezeichen (~) vorangestellt ist. Außerdem folgen Destruktoren a von unten nach oben Ansatz, im Gegensatz zu Konstruktoren, die einem Top-to-Down-Ansatz folgen.

Syntax:

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

Weitere Informationen finden Sie unter Zerstörer .

27. Was ist ein virtueller Destruktor?

Beim Zerstören von Instanzen oder Objekten einer abgeleiteten Klasse mithilfe eines Basisklassenzeigerobjekts wird ein virtueller Destruktor aufgerufen, um den vom abgeleiteten Klassenobjekt oder der abgeleiteten Klasseninstanz zugewiesenen Speicherplatz freizugeben.

'ABC's in Zahlen'

Der virtuelle Destruktor garantiert, dass zuerst der Destruktor der abgeleiteten Klasse aufgerufen wird. Dann wird der Destruktor der Basisklasse aufgerufen, um den von beiden Destruktoren in der Vererbungsklasse belegten Platz freizugeben, was uns vor dem Speicherverlust bewahrt. Es wird empfohlen, Ihren Destruktor immer dann virtuell zu machen, wenn Ihre Klasse polymorph ist.

Weitere Informationen finden Sie unter Virtueller Zerstörer

28. Ist eine Überladung des Destruktors möglich? Wenn ja, dann erklären Sie, und wenn nein, warum?

Die einfache Antwort ist NEIN Wir können einen Destruktor nicht überladen. In C++ ist es zwingend erforderlich, nur Destruktoren pro Klasse zu verwenden. Außerdem ist zu erwähnen, dass der Destruktor weder Argumente entgegennimmt noch über einen Parameter verfügt, der zur Überladung beitragen könnte.

C++-Interviewfragen – Mittelstufe

29. Welche Operationen sind auf Zeigern erlaubt?

Zeiger sind Variablen, die zum Speichern der Adressposition einer anderen Variablen verwendet werden. Zulässige Operationen für einen Zeiger sind:

  1. Inkrementieren/Dekrementieren eines Zeigers
  2. Addition und Subtraktion einer Ganzzahl zu einem Zeiger
  3. Vergleich von Zeigern des gleichen Typs

30. Was ist der Zweck des löschen Operator?

Der Löschoperator wird verwendet, um alle Merkmale/Eigenschaften eines Objekts zu löschen/entfernen, indem der Speicher freigegeben wird. außerdem gibt es am Ende wahr oder falsch zurück. Vereinfacht ausgedrückt werden Array- und Nicht-Array-Objekte (Zeiger), die durch neue Ausdrücke erstellt werden, zerstört oder freigegeben.

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

Weitere Informationen finden Sie unter Betreiber löschen

31. Wie unterscheidet sich delete [] von delete?

löschen[]

löschen

Es wird zum Löschen eines gesamten Arrays verwendetEs wird verwendet, um nur einen einzelnen Zeiger zu löschen
Es wird zum Löschen der Objekte von verwendet neu[]; Damit können wir das sagen löschen[] wird verwendet, um ein Array von Objekten zu löschenEs wird zum Löschen der Objekte von verwendet neu; Damit können wir das sagen löschen wird verwendet, um ein einzelnes Objekt zu löschen
Es kann so viele Destruktoren aufrufen, wie es möchteDer Destruktor einer Klasse kann nur einmal aufgerufen werden

32. Was wissen Sie über die Freundesklasse und die Freundesfunktion?

Eine Friend-Klasse ist eine Klasse, die sowohl auf die geschützten als auch auf die privaten Variablen der Klassen zugreifen kann, in denen sie als Friend deklariert ist.

Beispiel einer Freundesklasse:

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


Eine Friend-Funktion ist eine Funktion, die für den Zugriff auf private, geschützte und öffentliche Datenmitglieder oder Mitgliedsfunktionen anderer Klassen verwendet wird. Es wird mit einem Friend-Schlüsselwort deklariert. Der Vorteil einer Friend-Funktion besteht darin, dass sie nicht an den Gültigkeitsbereich der Klasse gebunden ist und sobald sie in einer Klasse deklariert ist, außerdem nicht von einem Objekt der Klasse aufgerufen werden kann; Daher kann es von anderen Funktionen aufgerufen werden. Unter Berücksichtigung aller genannten Punkte können wir sagen, dass eine Friend-Funktion eine globale Funktion ist .

Beispiel einer Friend-Funktion:

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


Weitere Informationen finden Sie im Freundesfunktion und Freundesklasse

33. Was ist ein Überlauffehler?

Ein Überlauffehler tritt auf, wenn die Zahl zu groß ist, als dass der Datentyp sie verarbeiten könnte. Vereinfacht ausgedrückt handelt es sich um einen Fehlertyp, der für den definierten Bereich gültig ist, jedoch über den definierten Bereich hinausgeht, in dem er zusammenfallen/liegen sollte.

Der Bereich des Datentyps int ist beispielsweise –2.147.483.648 Zu 2.147.483.647 und wenn wir eine Größenvariable deklarieren 2.247.483.648 es wird ein Überlauffehler generiert.

34. Was macht der Scope Resolution-Operator?

Ein Bereichsauflösungsoperator wird durch ein „“ gekennzeichnet. :: ‘-Symbol. Genau wie sein Name löst dieser Operator die Grenzen des Umfangs in einem Programm auf. Ein Bereichsauflösungsoperator wird verwendet, um auf eine Mitgliedsfunktion oder eine globale Variable außerhalb ihres Gültigkeitsbereichs zu verweisen und darüber hinaus auch auf die verborgene Variable oder Funktion in einem Programm zuzugreifen.

Scope Resolution wird für zahlreiche Aufgaben verwendet:

  1. Zugriff auf eine globale Variable, wenn eine lokale Variable mit demselben Namen vorhanden ist
  2. Um die Funktion außerhalb der Klasse zu definieren
  3. Bei mehreren Erbschaften
  4. Für Namensraum

Weitere Informationen finden Sie unter Bereichsauflösungsoperator

35. Was sind die C++-Zugriffsmodifikatoren?

Die für die Klassenmitglieder angegebene Zugriffsbeschränkung (unabhängig davon, ob es sich um Mitgliedsfunktionen oder Datenmitglieder handelt) wird als Zugriffsmodifikator/-spezifizierer bezeichnet.

Es gibt drei Arten von Zugriffsmodifikatoren:

  1. Privat - Es ist von außerhalb der Klasse weder zugänglich noch einsehbar
  2. Geschützt – Es kann genau dann darauf zugegriffen werden, wenn der Accessor die abgeleitete Klasse ist
  3. Öffentlich - Es kann von außerhalb der Klasse darauf zugegriffen oder eingesehen werden

Weitere Informationen finden Sie unter Zugriffsmodifikatoren

36. Kann man ein Programm ohne die Hauptfunktion kompilieren?

Ja, es ist durchaus möglich, ein Programm ohne main() zu kompilieren. Verwenden Sie beispielsweise Makros, die das Hauptelement definieren

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

Weitere Informationen finden Sie unter Können Sie ein Programm ohne die Hauptfunktion kompilieren?

37. Was ist STL?

STL ist als Standard Template Library bekannt. Es handelt sich um eine Bibliothek, die vier Komponenten wie Container, Algorithmen und Iteratoren bereitstellt.

C++ STL

Weitere Informationen finden Sie unter STL in C++

38. Inline-Funktion definieren. Können wir in C++ eine rekursive Inline-Funktion haben?

Eine Inline-Funktion ist eine Form einer Anfrage und kein Befehl an einen Compiler, der zum Inlining unserer Funktion in den Hauptfunktionskörper führt. Eine Inline-Funktion kann zu einem Overhead führen, wenn die Ausführungszeit der Funktion kürzer ist als die Umschaltzeit von der aufrufenden Funktion zur aufgerufenen Funktion. Um eine Funktion inline zu machen, verwenden Sie das Schlüsselwort im Einklang vor und definieren Sie die Funktion, bevor Aufrufe an die Funktion erfolgen.

Inline-Funktion

Erklärung der Inline-Funktion

Syntax:

inline data_type function_name() { Body; }>

Die Antwort ist NEIN; Es kann nicht rekursiv sein.

Eine Inline-Funktion kann nicht rekursiv sein, da im Fall einer Inline-Funktion der Code lediglich an der Position platziert wird, von der aus er aufgerufen wird, und keine Informationen auf dem Stapel speichert, die für die Rekursion erforderlich sind.

Wenn Sie außerdem ein Inline-Schlüsselwort vor eine rekursive Funktion schreiben, wird es vom Compiler automatisch ignoriert, da das Inline-Schlüsselwort vom Compiler nur als Vorschlag betrachtet wird.

Weitere Informationen finden Sie unter Inline-Funktion

39. Was ist eine abstrakte Klasse und wann verwenden Sie sie?

Eine abstrakte Klasse ist eine Klasse, die speziell als Basisklasse verwendet werden soll. Eine abstrakte Klasse enthält mindestens eine rein virtuelle Funktion. Eine rein virtuelle Funktion deklarieren Sie mit a reiner Spezifizierer (= 0) in der Deklaration einer virtuellen Memberfunktion in der Klassendeklaration

Sie können eine abstrakte Klasse weder als Parametertyp, als Funktionsrückgabetyp oder als Typ einer expliziten Konvertierung verwenden, noch können Sie ein Objekt einer abstrakten Klasse deklarieren. Es kann jedoch verwendet werden, um Zeiger und Referenzen auf eine abstrakte Klasse zu deklarieren.

Eine abstrakte Klasse wird verwendet, wenn Sie eine gemeinsame, implementierte Funktionalität für alle Implementierungen der Komponente bereitstellen möchten. Mit abstrakten Klassen können Sie Ihre Klasse teilweise implementieren, während Schnittstellen für keinerlei Mitglieder eine Implementierung hätten. Vereinfacht ausgedrückt eignen sich abstrakte Klassen gut, wenn Sie Ihren Kindern Implementierungsdetails bereitstellen, aber nicht zulassen möchten, dass eine Instanz Ihrer Klasse direkt instanziiert wird.

40. Was sind die statischen Datenelemente und statischen Elementfunktionen?

Das statische Datenelement einer Klasse ist ein normales Datenelement, dem jedoch ein statisches Schlüsselwort vorangestellt ist. Es wird vor main() in einem Programm ausgeführt und auf 0 initialisiert, wenn das erste Objekt der Klasse erstellt wird. Es ist nur für eine definierte Klasse sichtbar, sein Gültigkeitsbereich ist jedoch lebenslang.

Syntax:

  static Data_Type Data_Member;>

Die statische Mitgliedsfunktion ist die Mitgliedsfunktion, die für den Zugriff auf andere statische Datenmitglieder oder andere statische Mitgliedsfunktionen verwendet wird. Es wird auch mit einem statischen Schlüsselwort definiert. Wir können über den Klassennamen oder Klassenobjekte auf die statische Memberfunktion zugreifen.

Syntax:

classname::function name(parameter);>

C++-Interviewfragen – Expertenebene

41. Was ist die Hauptverwendung des Schlüsselworts Volatile?

Genau wie der Name, können sich Dinge plötzlich und unerwartet ändern; Daher wird es verwendet, um den Compiler darüber zu informieren, dass sich der Wert jederzeit ändern kann. Außerdem verhindert das Schlüsselwort volatile, dass der Compiler eine Optimierung des Codes durchführt. Es sollte als Schnittstelle zu speicherabgebildeter Hardware, Signalhandlern und Maschinencodeanweisungen verwendet werden.

Weitere Informationen finden Sie hier Flüchtig

42. Definieren Sie eine Speicherklasse in C++ und benennen Sie einige

Die Speicherklasse wird verwendet, um die Merkmale (Lebensdauer und Sichtbarkeit) einer Variablen oder Funktion zu definieren. Diese Funktionen helfen normalerweise dabei, die Existenz einer Variablen während der Laufzeit eines Programms zu verfolgen.

Syntax:

storage_class var_data_type var_name;>

Einige Arten von Speicherklassen:

Beispiele für Speicherklassen

Weitere Informationen finden Sie unter Speicherklasse

43. Was ist ein veränderlicher Speicherklassenspezifizierer? Wie können sie verwendet werden?

Genau wie sein Name wird der veränderbare Speicherklassenspezifizierer nur für ein Klassendatenmitglied verwendet, um es änderbar zu machen, auch wenn das Mitglied Teil eines als const deklarierten Objekts ist. Statische, konstante oder Referenzmitglieder können den veränderlichen Spezifizierer nicht verwenden. Wenn wir eine Funktion als const deklarieren, wird dieser an die Funktion übergebene Zeiger zu const.

44. Definieren Sie die Blockbereichsvariable.

Der Gültigkeitsbereich einer Variablen ist also ein Bereich, in dem auf eine Variable zugegriffen werden kann. Es gibt zwei Bereichsbereiche: einen globalen Bereich und einen Block- oder lokalen Bereich.

Eine Blockbereichsvariable wird auch als lokale Bereichsvariable bezeichnet. Eine Variable, die innerhalb einer Funktion (wie main) oder innerhalb eines Blocks (wie Schleifen und if-Blöcke) definiert ist, ist eine lokale Variable. Es kann NUR innerhalb der bestimmten Funktion/des bestimmten Blocks verwendet werden, in der es deklariert ist. Eine blockbezogene Variable ist außerhalb des Blocks nicht verfügbar, selbst wenn sich der Block innerhalb einer Funktion befindet.

Weitere Informationen finden Sie unter Umfang einer Variablen

45. Welche Funktion hat das Schlüsselwort Auto?

Das Schlüsselwort auto kann verwendet werden, um eine Variable mit einem komplexen Typ auf einfache Weise zu deklarieren. Sie können auto verwenden, um eine Variable zu deklarieren, wenn die Initialisierungsphrase Vorlagen, Zeiger auf Funktionen, Verweise auf Mitglieder usw. enthält. Mit Typinferenzfunktionen können wir weniger Zeit damit verbringen, Dinge auszuschreiben, die der Compiler bereits kennt. Da alle Typen erst in der Compilerphase abgeleitet werden, erhöht sich die Kompilierungszeit geringfügig, hat jedoch keinen Einfluss auf die Laufzeit des Programms.

Weitere Informationen finden Sie unter Autos in C++

Wie alt ist Pete Davidson?

46. ​​Namespace in C++ definieren.

Namespaces ermöglichen es uns, benannte Elemente, die andernfalls einen globalen Geltungsbereich hätten, in kleineren Bereichen zu organisieren, sodass wir ihnen einen Namespace-Geltungsbereich zuweisen können. Dies ermöglicht die Organisation von Programmteilen in eindeutigen logischen Bereichen mit Namen. Der Namespace bietet einen Ort zum Definieren oder Deklarieren von Bezeichnern wie Variablen, Methoden und Klassen.

Oder wir könnten sagen: Ein Namespace ist eine deklarative Zone, die den darin enthaltenen Bezeichnern (Namen von Typen, Funktionen, Variablen usw.) einen Gültigkeitsbereich gibt. Namespaces werden verwendet, um Code in logische Kategorien einzuordnen und Namenskonflikte zu vermeiden, die auftreten können, wenn Ihre Codebasis viele Bibliotheken enthält.

Weitere Informationen finden Sie unter Namespace in C++

47. Wann wird der Rückgabetyp void() verwendet?

Wenn das Schlüsselwort void als Funktionsrückgabetyp verwendet wird, gibt es an, dass die Funktion keinen Wert zurückgibt. Bei Verwendung als Parameterliste für eine Funktion gibt void an, dass die Funktion keine Parameter akzeptiert. Funktionen, die keinen Wert zurückgeben, werden auch als Void-Funktionen bezeichnet. Sie werden als „nichtig“ bezeichnet, da sie nicht darauf ausgelegt sind, etwas zurückzugeben. Stimmt, aber nur teilweise. Wir können keine Werte von Void-Funktionen zurückgeben, aber wir können auf jeden Fall etwas zurückgeben. Obwohl Void-Funktionen keinen Rückgabetyp haben, können sie Werte zurückgeben.

Weitere Informationen finden Sie unter Ungültiger Rückgabetyp .

48. Was ist der Unterschied zwischen flacher Kopie und tiefer Kopie?

Flache Kopie

Tiefe Kopie

Bei der flachen Kopie wird eine Kopie des Originalobjekts gespeichert und schließlich nur die Referenzadresse kopiert. Vereinfacht ausgedrückt: Shallow Copy dupliziert so wenig wie möglichBeim Deep Copy werden sowohl die Kopie des Originalobjekts als auch die sich wiederholenden Kopien gespeichert. Einfach ausgedrückt dupliziert Deep Copy alles
Eine flache Kopie einer Sammlung ist eine Kopie der Sammlungsstruktur, nicht der Elemente. Mit einer flachen Kopie teilen sich nun zwei Sammlungen einzelne Elemente.Eine tiefe Kopie einer Sammlung besteht aus zwei Sammlungen, bei denen alle Elemente der ursprünglichen Sammlung dupliziert sind.
Eine flache Kopie ist schnellerDeep Copy ist vergleichsweise langsamer.

Weitere Informationen finden Sie unter Flache Kopie vs. tiefe Kopie

49. Können wir eine virtuelle Funktion von einem Konstruktor aus aufrufen?

Ja, wir können eine virtuelle Funktion von einem Konstruktor aus aufrufen. Aber es kann eine Ausnahme des Überschreibens auslösen.

50. Was sind ungültige Zeiger?

Genau wie der Name schon sagt, ist ein Void-Zeiger ein Zeiger, der weder mit irgendetwas noch mit irgendeinem Datentyp verknüpft ist. Dennoch kann ein Void-Zeiger den Adresswert eines beliebigen Typs enthalten und von einem Datentyp in einen anderen konvertiert werden.

Weitere Informationen finden Sie unter Leerer Zeiger in C++

Bonus-Frage:

Was ist ' Das „Zeiger in C++?

Das Der Zeiger ermöglicht jedem Objekt den Zugriff auf seine eigene Adresse über einen wesentlichen Zeiger. Alle Mitgliedsfunktionen übernehmen Das Zeiger als implizites Argument. Das Zeiger kann verwendet werden, um auf das aufrufende Objekt innerhalb einer Member-Funktion zu verweisen.

  • Das Ein Zeiger wird verwendet, um ein Objekt als Parameter an eine andere Methode zu übergeben.
  • Jedes Objekt erhält eine eigene Kopie des Datenelements.
  • Das Zeiger wird zum Deklarieren von Indexern verwendet.

Weitere Informationen finden Sie unter Das Zeiger in C++