logo

Pytania i odpowiedzi do rozmowy kwalifikacyjnej w C++ (2024)

C++ – obowiązkowy i zawsze ulubiony język programowania programistów. Temat jest nadal aktualny, tak samo jak w połowie lat 80. Jako język programowania ogólnego przeznaczenia i zorientowany obiektowo, jest on szeroko stosowany głównie za każdym razem podczas kodowania. W rezultacie niektóre stanowiska wymagają od osób biegłości w języku C++. Korzystają z niego czołowe firmy informatyczne, m.in Evernote, LinkedIn, Microsoft, Opera, NASA , I Meta ze względu na jego niezawodność, wydajność i szeroki zakres ustawień, w których może być używany. Aby więc dostać się do tych firm, musisz być w nich dokładny 50 najpopularniejszych pytań do rozmowy kwalifikacyjnej w języku C++ co może sprawić, że w oczach rekruterów będziesz sprawiał wrażenie eksperta.

50 najpopularniejszych pytań do rozmowy kwalifikacyjnej w języku C++ dla nowicjuszy i doświadczonych (2022)

Aby przygotować Cię na rozmowę kwalifikacyjną, przynieśliśmy 50 najpopularniejszych pytań do rozmowy kwalifikacyjnej w języku C++ początkujący, średniozaawansowany i doświadczony przez które z pewnością musisz przejść, aby znaleźć się w czołowych korporacjach międzynarodowych.

Pytania do rozmowy kwalifikacyjnej w C++ dla nowicjuszy

1. Co to jest C++? Jakie są zalety C++?

C++ to obiektowy język programowania, który został wprowadzony w celu przezwyciężenia jurysdykcji, w których brakowało C. Przez zorientowany obiektowo rozumiemy, że działa z koncepcją wielopostaciowość , dziedzictwo , abstrakcja , kapsułkowanie , przedmiot i klasa .



Zalety C++ :

  1. C++ to język OOP, co oznacza, że ​​dane są traktowane jako obiekty.
  2. C++ jest językiem wieloparadygmatowym; W uproszczeniu oznacza to, że możemy zaprogramować logikę, strukturę i procedurę programu.
  3. Zarządzanie pamięcią jest kluczową funkcją w C++, ponieważ umożliwia dynamiczną alokację pamięci
  4. Jest to język programowania średniego poziomu, co oznacza, że ​​można w nim tworzyć gry, aplikacje komputerowe, sterowniki i jądra

Więcej informacji znajdziesz w artykule – Jakie są zalety C++?

2. Jakie są różne typy danych obecne w C++?

typy danych w C++

Różne typy danych w C++

Aby uzyskać więcej informacji, zobacz ' std’ jest również znany jako Standard lub może być interpretowany jako przestrzeń nazw. Komenda używając przestrzeni nazw std informuje kompilator, aby dodał wszystko pod standardowa przestrzeń nazw i zaszczepić je w globalna przestrzeń nazw . To całe wpajanie globalnej przestrzeni nazw przynosi nam korzyści cout I jedzenie bez używania std::_operator_.

Aby uzyskać więcej informacji, zobacz przestrzeń nazw i std .

4. Czym są referencje w C++?

Kiedy zmienna jest opisana jako referencja, staje się ona aliasem już istniejącej zmiennej. Mówiąc najprościej, zmienna, do której istnieje odwołanie, to kolejna nazwana zmienna istniejącej zmiennej, przy czym należy pamiętać, że zmiany dokonane w zmiennej odniesienia zostaną odzwierciedlone w już istniejącej zmiennej. Zmienna referencyjna jest poprzedzona a „&” symbol.

Składnia:

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

Aby uzyskać więcej informacji, zobacz referencje w C++

5. Co rozumiesz przez połączenie przez wartość i połączenie przez referencję?

W tym języku programowania do wywołania funkcji mamy 2 metody: Zadzwoń według wartości I Zadzwoń przez referencje

Zadzwoń według wartości

Zadzwoń przez referencje

Przekazana jest kopia zmiennej.Sama zmienna jest przekazywana zasadniczo.
Wywołanie funkcji poprzez przesłanie wartości poprzez skopiowanie zmiennych.Wywołanie funkcji poprzez przesłanie adresu przekazanej zmiennej.
Zmiany dokonane w funkcji nigdy nie są odzwierciedlane poza funkcją zmiennej. Krótko mówiąc, oryginalna wartość nigdy nie jest zmieniana w Call by Value.Zmiany dokonane w funkcjach można zobaczyć poza funkcją w przekazanej funkcji. Krótko mówiąc, oryginalna wartość jest zmieniana w Call przez odniesienie.
Przekazane parametry rzeczywiste i formalne są przechowywane w różnych lokalizacjach pamięci. Dlatego też wywołanie wywołania według wartości jest niewystarczającePrzekazane parametry aktualne i formalne zapisywane są w tym samym miejscu pamięci. Dlatego też uczynienie Call by Reference nieco bardziej wydajnym pod względem pamięci.

Aby uzyskać informacje, patrz różnica między wywołaniem według wartości a wywołaniem przez odwołanie

6. Zdefiniuj token w C++

Token to najmniejszy indywidualny element programu zrozumiały dla kompilatora. Token składa się z następujących elementów:

  1. Słowa kluczowe – Które mają specjalne znaczenie dla kompilatora
  2. Identyfikatory – Które posiadają unikalną wartość/tożsamość
  3. Stałe – Które nigdy nie zmieniają swojej wartości w trakcie trwania programu
  4. Smyczki – Zawiera jednorodną sekwencję danych
  5. Symbole specjalne – mają jakieś specjalne znaczenie i nie można ich używać w innym celu; np: [] () {}, ; * = #
  6. Operatorzy – Kto wykonuje operacje na operandze

Aby uzyskać więcej informacji, zobacz Tokeny w C++

7. Jaka jest różnica pomiędzy C i C++?

C

C++

Jest to proceduralny język programowania. Krótko mówiąc, nie obsługuje klas i obiektówJest to mieszanina języków programowania proceduralnego i obiektowego. W prostych słowach obsługuje klasy i obiekty.
Nie obsługuje żadnych koncepcji OOP, takich jak polimorfizm, abstrakcja danych, enkapsulacja, klasy i obiekty.Obsługuje wszystkie koncepcje danych
Nie obsługuje przeciążania funkcji i operatorówObsługuje odpowiednio Przeciążanie Funkcji i Operatora
Jest to język oparty na funkcjachJest to język obiektowy

Aby uzyskać więcej informacji, zobacz Różnica między C i C++

8. Jaka jest różnica pomiędzy strukturą a klasą?

Struktura

Klasa

Elementy członkowskie struktury są zawsze domyślnie w trybie publicznymCzłonkowie klasy mogą znajdować się w trybach prywatnym, chronionym i publicznym.
Struktury są typu wartościowego. Zachowują wartość jedynie w pamięci.Klasy są typu referencyjnego. Przechowuje w pamięci odniesienie do obiektu.
Pamięć w strukturach jest przechowywana w postaci stosówPamięć klas jest przechowywana w postaci stert.

Więcej informacji można znaleźć w Różnica między strukturą a klasą.

9. Jaka jest różnica między referencją a wskaźnikiem?

Odniesienie

oni są piosenkarzami

Wskaźnik

Nie można ponownie przypisać wartości odniesieniaWartość wskaźnika można ponownie przypisać
Nigdy nie może pomieścić zero value, ponieważ potrzebuje istniejącej wartości, aby stać się aliasemMoże trzymać lub wskazywać na zero wartość i być określane jako nullptr Lub wskaźnik zerowy
Nie może działać z tablicamiMoże pracować z tablicami
Aby uzyskać dostęp do członków klasy/struktury, używa „ . 'Aby uzyskać dostęp do członków klasy/struktury, używa „ -> '
Dostęp do lokalizacji pamięci odniesienia można łatwo uzyskać lub można z niej bezpośrednio skorzystaćDostęp do lokalizacji pamięci wskaźnika nie jest łatwy, ponieważ musimy użyć dereferencji „ * '

Więcej informacji można znaleźć w Różnica między referencją a wskaźnikiem

10. Jaka jest różnica pomiędzy przeciążaniem funkcji a przeciążaniem operatora?

Przeciążenie funkcji

Przeciążenie operatora

Zasadniczo jest to definiowanie funkcji na wiele sposobów, tak że istnieje wiele sposobów jej wywoływania lub, mówiąc prościej, masz wiele wersji tej samej funkcjiZasadniczo jest to praktyka nadawania specjalnego znaczenia istniejącemu znaczeniu operatora lub w uproszczeniu przedefiniowanie wcześniej przedefiniowanego znaczenia
Funkcje sparametryzowane są dobrym przykładem przeciążania funkcji, ponieważ sama zmiana argumentu lub parametru funkcji sprawia, że ​​jest ona użyteczna do różnych celówPolimorfizm jest dobrym przykładem przeciążania operatora, ponieważ obiekt klasy alokacji może być używany i wywoływany przez różne klasy w różnych celach

Przykład przeciążenia funkcji:

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

Przykład przeciążenia operatora:

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

Aby uzyskać więcej informacji, zobacz Przeciążenie operatora I Przeciążenie funkcji

11. Jaka jest różnica między tablicą a listą?

Tablice

Listy

Tablica to ciągłe lokalizacje pamięci zawierające jednorodne typy danych przechowywane w ustalonej lokalizacji lub rozmiarze.Listy to klasyczne pojedyncze elementy, które są połączone lub połączone ze sobą za pomocą wskaźników i nie mają stałego rozmiaru.
Tablice mają charakter statyczny.Listy mają charakter dynamiczny
Zużywa mniej pamięci niż listy połączone.Zużywa więcej pamięci, ponieważ musi przechowywać wartość i lokalizację pamięci wskaźnika

Aby uzyskać więcej informacji, zobacz Tablice a lista

12. Jaka jest różnica pomiędzy pętlą while a pętlą do-while?

Podczas gdy Pętla

pętla do-while

Pętla while jest również nazywana pętlą sterowaną wejściemPętla „do-while” nazywana jest pętlą kontroli wyjścia
Jeśli warunek nie jest spełniony, instrukcje wewnątrz pętli nie zostaną wykonaneNawet jeśli warunek nie jest spełniony, instrukcje wewnątrz pętli zostaną wykonane co najmniej raz

Przykład pętli while:

podczas gdy (warunek)

{wyciągi do wykonania;};

Przykład pętli do-while:

Do {

instrukcje do wykonania;

} while(warunek lub wyrażenie);

Więcej informacji można znaleźć w Różnica między pętlą while i do-while

13. Omów różnicę między przedrostkiem a postfiksem?

prefiks

przyrostek

Oznacza to po prostu umieszczenie operatora przed operandemOznacza to po prostu umieszczenie operatora po operandzie
Wykonuje się wcześniej '; ' Wykonuje się sam po '; '
Łączność przedrostka ++ jest od prawej do lewejŁączność Postfix ++ jest od lewej do prawej

Więcej informacji można znaleźć w Różnica między przedrostkiem a postfiksem

14. Jaka jest różnica między new i malloc()?

nowy

malloc()

new jest operatorem wykonującym operacjęmalloc to funkcja, która zwraca i akceptuje wartości
nowe wzywa konstruktorówmalloc nie może wywołać konstruktora
new jest szybszy niż malloc, ponieważ jest operatoremmalloc jest wolniejszy niż nowy, ponieważ jest funkcją
new zwraca dokładny typ danychmalloc zwraca nieważność*

Aby uzyskać więcej informacji, zobacz Różnica między nowym a malloc()

15. Jaka jest różnica pomiędzy funkcjami wirtualnymi a funkcjami czysto wirtualnymi?

Funkcja wirtualna

Czysta funkcja wirtualna

Funkcja wirtualna jest funkcją składową klasy bazowej, którą można przedefiniować w innej klasie pochodnej.Czysta funkcja wirtualna to funkcja składowa klasy bazowej, która jest zadeklarowana tylko w klasie bazowej i zdefiniowana w klasie pochodnej, aby zapobiec przekształceniu się w klasę abstrakcyjną.
Funkcja wirtualna ma swoją definicję w odpowiedniej klasie bazowej.W funkcji Pure Virtual Function nie ma definicji i jest ona inicjowana za pomocą czystego specyfikatora (= 0).
Klasa bazowa ma funkcję wirtualną, którą można reprezentować lub instancję; Krótko mówiąc, jego przedmiot można wykonać.Klasa bazowa posiadająca czystą funkcję wirtualną staje się abstrakcyjna, której nie można przedstawić ani utworzyć instancji; W prostych słowach oznacza to, że jego przedmiotu nie da się stworzyć.

Więcej informacji można znaleźć w Różnica między funkcjami wirtualnymi a funkcjami czysto wirtualnymi

16. Czym są klasy i obiekty w C++?

Klasa to typ danych zdefiniowany przez użytkownika, w którym wszystkie funkcje składowe i elementy danych są dostosowywane zgodnie z wymaganiami i wymaganiami, a ponadto dostęp do nich można uzyskać za pomocą obiekt . Aby zadeklarować typ danych zdefiniowany przez użytkownika, używamy słowa kluczowego klasa.

Obiekt jest instancją klasy i bytu posiadającego wartość i stan; Mówiąc najprościej, służy jako katalizator lub reprezentuje członka klasy. Może zawierać różne parametry lub nie zawierać ich wcale.

Notatka: Klasa to plan definiujący funkcje używane przez obiekt.

Aby uzyskać więcej informacji, zapoznaj się z tym Czym są klasy i obiekty

17. Co to jest zastępowanie funkcji?

Kiedy funkcja o tej samej nazwie, tych samych argumentach lub parametrach i tym samym typie zwracanym, który jest już obecny/zadeklarowany w klasie bazowej, jest używana w klasie pochodnej, nazywa się to przesłonięciem funkcji. Jest to przykład polimorfizmu czasu wykonywania lub późnego wiązania, co oznacza, że ​​przesłonięta funkcja zostanie wykonana w czasie wykonywania.

Aby uzyskać więcej informacji, zobacz Przesłanianie funkcji w C++

18. Jakie są różne koncepcje OOP w C++?

  • Zajęcia : Jest to typ danych zdefiniowany przez użytkownika
  • Obiekty : Jest to instancja klasy
  • Abstrakcja: Jest to technika pokazania tylko niezbędnych szczegółów
  • Kapsułkowanie: Zawijanie danych w jedną jednostkę
  • Dziedzictwo: Zdolność klasy do wyprowadzania właściwości i charakterystyk z innej klasy
  • Wielopostaciowość: Polimorfizm jest znany jako wiele form tej samej rzeczy

Aby uzyskać więcej informacji, zobacz Różne koncepcje OOP w C++

19. Wyjaśnij dziedziczenie

Zdolność klasy do wyprowadzania właściwości i cech charakterystycznych z innej klasy nazywana jest dziedziczeniem. W uproszczeniu jest to system lub technika ponownego wykorzystania i rozszerzenia istniejących klas bez ich modyfikowania.

Aby uzyskać więcej informacji, zobacz Dziedzictwo

formatowanie ciągów Java

20. Kiedy powinniśmy stosować dziedziczenie wielokrotne?

Wielokrotne dziedziczenie oznacza, że ​​klasa pochodna może dziedziczyć dwie lub więcej klas bazowych/nadrzędnych. Jest to przydatne, gdy klasa pochodna musi połączyć wiele atrybutów/kontraktów i dziedziczyć część lub całość implementacji z tych atrybutów/kontraktów. Weźmy przykład z życia wzięty, rozważ swoich Rodziców, gdzie Rodzic A jest Twoim TATĄ, Rodzic B jest Twoją MAMĄ, a Dziecko C to Ty.

wielokrotne spadki

Wiele spadków

Aby uzyskać więcej informacji, zobacz Dziedziczenie wielokrotne .

21. Czym jest dziedziczenie wirtualne?

Dziedziczenie wirtualne to technika zapewniająca, że ​​tylko jedna kopia zmiennych składowych klasy bazowej będzie dziedziczona przez klasy pochodne. Mówiąc najprościej, dziedziczenie wirtualne jest używane, gdy mamy do czynienia z sytuacją wielokrotnego dziedziczenia, ale chcemy zapobiec pojawianiu się wielu instancji tej samej klasy w hierarchii dziedziczenia.

22. Czym jest polimorfizm w C++?

Polimorfizm jest znany jako wiele form tej samej rzeczy. Mówiąc prościej, możemy powiedzieć, że polimorfizm to zdolność do wyświetlania funkcji składowej w wielu formach, w zależności od typu obiektu, który ją wywołuje.

Inaczej mówiąc, możemy też powiedzieć, że mężczyzna może być czyimś pracownikiem, czyimś synem, czyimś ojcem i czyimś mężem; w ten sposób można odwzorować polimorfizm w prawdziwym życiu.

Istnieją 2 rodzaje polimorfizmu:

  1. Polimorfizm czasu kompilacji
    • Przeciążenie funkcji
    • Przeciążenie operatora
  2. Polimorfizm czasu wykonania
    • Zastąpienie funkcji
    • Funkcja wirtualna

Aby dowiedzieć się więcej na ten temat, zob Wielopostaciowość

23. Jakie są różne typy polimorfizmu w C++?

Wyróżnia się 2 rodzaje polimorfizmu

Polimorfizm czasu kompilacji lub wiązanie statyczne

Ten typ polimorfizmu osiąga się podczas kompilacji programu, co powoduje, że jego wykonanie jest nieco szybsze niż w czasie wykonywania. Dziedziczenie również nie jest w to zaangażowane. Składa się z 2 dalsze techniki :

Przeciążenie funkcji: Gdy istnieje wiele funkcji o tej samej nazwie, ale różnych parametrach, nazywa się to przeciążaniem funkcji.

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


Przeciążenie operatora: Zasadniczo jest to praktyka nadawania specjalnego znaczenia istniejącemu znaczeniu operatora lub w uproszczeniu przedefiniowanie wcześniej przedefiniowanego znaczenia

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

Polimorfizm w czasie wykonywania lub późne wiązanie

Polimorfizm w czasie wykonywania ma miejsce, gdy funkcje są wywoływane w czasie wykonywania.

Zastąpienie funkcji: Przesłanianie funkcji ma miejsce, gdy funkcja składowa klasy bazowej jest redefiniowana w klasie pochodnej z tymi samymi argumentami i typem zwracanym.

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

Wyjście:

Function of derived class>

Aby uzyskać więcej informacji, zobacz Różne typy polimorfizmu

24. Porównaj polimorfizm czasu kompilacji i polimorfizm środowiska wykonawczego

Polimorfizm w czasie kompilacji

Polimorfizm środowiska wykonawczego

Nazywa się je również wiązaniem statycznym i wczesnym wiązaniem.Nazywa się to również wiązaniem dynamicznym i wiązaniem późnym.
Jest szybki, ponieważ wykonanie jest znane już na etapie kompilacji.Jest powolny w porównaniu z czasem kompilacji, ponieważ wykonanie jest znane w czasie wykonywania.
Osiąga się to poprzez przeciążanie funkcji i przeciążanie operatora.Osiąga się to poprzez funkcje wirtualne i nadpisywanie funkcji.

Aby uzyskać więcej informacji, zobacz Polimorfizm w czasie kompilacji i polimorfizm w czasie wykonywania

25. Wyjaśnij konstruktor w C++.

Konstruktor to specjalny typ funkcji składowej klasy, której nazwa jest taka sama jak nazwa klasy, przez którą jest wywoływana, i inicjuje wartość obiektu klasy.

Istnieją 3 typy konstruktorów:

A. Konstruktor domyślny: Jest to najbardziej podstawowy typ konstruktora, który nie przyjmuje żadnych argumentów ani parametrów. Nawet jeśli nie jest wywoływany, kompilator wywołuje go automatycznie podczas tworzenia obiektu.

Przykład:

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


B. Konstruktor parametryczny: Jest to typ konstruktora, który akceptuje argumenty lub parametry. Należy go wywołać jawnie, przekazując wartości w argumentach, ponieważ argumenty te pomagają zainicjować obiekt podczas jego tworzenia. Ma również taką samą nazwę jak klasa.

Służy również do przeciążania konstruktorów.

Przykład:

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

Wyjście

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

C. Konstruktor kopiujący: Konstruktor kopiujący to funkcja członkowska, która inicjuje obiekt przy użyciu innego obiektu tej samej klasy. Ponadto konstruktor Copy przyjmuje jako argument odwołanie do obiektu tej samej klasy.

Przykład:

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


Aby uzyskać więcej informacji, zobacz Konstruktorzy

26. Czym są destruktory w C++?

Destruktory są członkami funkcji klasy, które usuwają obiekt, gdy obiekt klasy wykracza poza zakres. Destruktory mają taką samą nazwę jak klasa poprzedzona znakiem tyldy (~). Ponadto destruktory podążają za a z dołu do góry podejście, w przeciwieństwie do konstruktorów, którzy podążają od góry do dołu.

przekonwertuj ciąg na jsonobject Java

Składnia:

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

Aby uzyskać więcej informacji, zobacz Niszczyciel .

27. Co to jest wirtualny destruktor?

Podczas niszczenia instancji lub obiektów klasy pochodnej przy użyciu obiektu wskaźnika klasy bazowej wywoływany jest wirtualny destruktor w celu zwolnienia miejsca w pamięci przydzielonej przez obiekt lub instancję klasy pochodnej.

Wirtualny destruktor gwarantuje, że najpierw zostanie wywołany destruktor klasy pochodnej. Następnie wywoływany jest destruktor klasy bazowej, który zwalnia miejsce zajmowane przez oba destruktory w klasie dziedziczenia, co chroni nas przed wyciekiem pamięci. Zaleca się, aby destruktor był wirtualny, gdy klasa jest polimorficzna.

Aby uzyskać więcej informacji, zobacz Wirtualny niszczyciel

28. Czy możliwe jest przeciążenie destruktora? Jeśli tak, to wyjaśnij, a jeśli nie, to dlaczego?

Odpowiedź jest prosta NIE nie możemy przeciążać destruktora. Obowiązkowe jest posiadanie tylko destruktora na klasę w C++. Warto też wspomnieć, że Destructor nie przyjmuje argumentów ani nie ma parametru, który mógłby pomóc w przeciążeniu.

Pytania do rozmowy kwalifikacyjnej C++ – poziom średniozaawansowany

29. Jakie operacje są dozwolone na wskaźnikach?

Wskaźniki to zmienne używane do przechowywania adresu innej zmiennej. Dozwolone operacje na wskaźniku to:

  1. Zwiększanie/zmniejszanie wskaźnika
  2. Dodawanie i odejmowanie liczby całkowitej do wskaźnika
  3. Porównanie wskaźników tego samego typu

30. Jaki jest cel usuwać operator?

Operator usuwania służy do usuwania/usuwania wszystkich cech/właściwości obiektu poprzez zwolnienie jego pamięci; ponadto na końcu zwraca wartość true lub false. Mówiąc najprościej, niszczy lub zwalnia obiekty tablicowe i obiekty niebędące tablicami (wskaźnikami), które są tworzone przez nowe wyrażenia.

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

Aby uzyskać więcej informacji, zobacz Usuń operatora

31. Czym usuwanie [] różni się od usuwania?

usuwać[]

usuwać

Służy do usuwania całej tablicySłuży do usuwania tylko jednego pojedynczego wskaźnika
Służy do usuwania obiektów nowy[]; Dzięki temu możemy to powiedzieć usuwać[] służy do usuwania tablicy obiektówSłuży do usuwania obiektów nowy; Dzięki temu możemy to powiedzieć usuwać służy do usuwania pojedynczego obiektu
Może wywoływać dowolną liczbę destruktorówMoże wywołać destruktor klasy tylko raz

32. Co wiesz o klasie znajomych i funkcjonowaniu znajomych?

Klasa zaprzyjaźniona to klasa, która może uzyskać dostęp zarówno do zmiennych chronionych, jak i prywatnych klas, w których jest zadeklarowana jako zaprzyjaźniona.

Przykład klasy przyjaciela:

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


Funkcja zaprzyjaźniona to funkcja używana do uzyskiwania dostępu do prywatnych, chronionych i publicznych składowych danych lub funkcji członkowskich innych klas. Jest ona deklarowana za pomocą słowa kluczowego znajomego. Zaletą funkcji zaprzyjaźnionej jest to, że nie jest ona powiązana z zakresem klasy, a ponadto gdy zostanie zadeklarowana w klasie, nie może być wywołana przez obiekt klasy; dlatego może być wywoływany przez inne funkcje. Biorąc pod uwagę wszystkie wymienione punkty, możemy powiedzieć, że funkcja przyjaciela jest funkcją globalną .

Przykład funkcji znajomego:

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


Więcej informacji można znaleźć w funkcja przyjaciela i klasa przyjaciela

33. Co to jest błąd przepełnienia?

Błąd przepełnienia występuje, gdy liczba jest zbyt duża, aby typ danych mógł ją obsłużyć. Mówiąc najprościej, jest to rodzaj błędu, który obowiązuje dla określonego, ale przekracza używany zdefiniowany zakres, w którym powinien pokrywać się/leżeć.

Na przykład zakres typu danych int to –2 147 483 648 Do 2 147 483 647 i jeśli zadeklarujemy zmienną size 2 247 483 648 wygeneruje błąd przepełnienia.

34. Co robi operator Rozdzielczości Zakresu?

Operator rozpoznawania zakresu jest oznaczony przez „ :: symbolem. Podobnie jak jego nazwa, operator ten rozwiązuje barierę zakresu w programie. Operator rozpoznawania zakresu służy do odwoływania się do funkcji składowej lub zmiennej globalnej spoza ich zakresu, a ponadto może uzyskać dostęp do ukrytej zmiennej lub funkcji w programie.

Rozdzielczość zakresu jest używana do wielu zadań:

  1. Aby uzyskać dostęp do zmiennej globalnej, gdy istnieje zmienna lokalna o tej samej nazwie
  2. Aby zdefiniować funkcję poza klasą
  3. W przypadku dziedziczenia wielokrotnego
  4. Dla przestrzeni nazw

Aby uzyskać więcej informacji, zobacz Operator rozdzielczości zakresu

przekreślenie przeceny

35. Jakie są modyfikatory dostępu w C++?

Ograniczenie dostępu określone dla członków klasy (niezależnie od tego, czy jest to funkcja składowa, czy element danych) jest znane jako modyfikatory/specyfikatory dostępu.

Modyfikatory dostępu są 3 typów:

  1. Prywatny – Nie można uzyskać do niego dostępu ani go przeglądać spoza klasy
  2. Chronione – Można uzyskać do niego dostęp wtedy i tylko wtedy, gdy akcesor jest klasą pochodną
  3. Publiczne – Można uzyskać do niego dostęp lub go przeglądać spoza klasy

Aby uzyskać więcej informacji, zobacz Modyfikatory dostępu

36. Czy potrafisz skompilować program bez funkcji main?

Tak, jest absolutnie możliwe skompilowanie programu bez funkcji main(). Na przykład Użyj makr, które definiują plik main

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

Aby uzyskać więcej informacji, zobacz Czy możesz skompilować program bez funkcji main

37. Co to jest STL?

STL jest znany jako standardowa biblioteka szablonów i jest biblioteką udostępniającą 4 komponenty, takie jak kontener, algorytmy i iteratory.

C++ STL

Aby uzyskać więcej informacji, zobacz STL w C++

38. Zdefiniuj funkcję inline. Czy możemy mieć rekursywną funkcję inline w C++?

Funkcja wbudowana jest formą żądania, a nie rozkazem skierowanym do kompilatora, co skutkuje wstawieniem naszej funkcji do treści głównej funkcji. Funkcja wbudowana może stać się narzutem, jeśli czas wykonania funkcji jest krótszy niż czas przełączania z funkcji wywołującej do funkcji wywoływanej. Aby funkcja była wbudowana, użyj słowa kluczowego wbudowane before i zdefiniuj funkcję przed wykonaniem jakichkolwiek wywołań tej funkcji.

Funkcja wbudowana

Wyjaśnienie funkcji wbudowanej

Składnia:

inline data_type function_name() { Body; }>

Odpowiedź to NIE; To nie może być rekurencyjne.

Funkcja inline nie może być rekurencyjna, ponieważ w przypadku funkcji inline kod jest jedynie umieszczany w pozycji, z której jest wywoływany i nie przechowuje na stosie żadnej informacji niezbędnej do rekurencji.

Ponadto, jeśli napiszesz słowo kluczowe inline przed funkcją rekurencyjną, kompilator automatycznie je zignoruje, ponieważ inline jest traktowane jedynie jako sugestia przez kompilator.

Aby uzyskać więcej informacji, zobacz Funkcja wbudowana

39. Co to jest klasa abstrakcyjna i kiedy jej używasz?

Klasa abstrakcyjna to klasa specjalnie zaprojektowana do użycia jako klasa bazowa. Klasa abstrakcyjna zawiera co najmniej jedną czystą funkcję wirtualną. Deklarujesz czystą funkcję wirtualną, używając a czysty specyfikator (= 0) w deklaracji wirtualnej funkcji członkowskiej w deklaracji klasy

Nie można używać klasy abstrakcyjnej jako typu parametru, typu zwracanego przez funkcję lub typu jawnej konwersji, ani nie można zadeklarować obiektu klasy abstrakcyjnej. Można go jednak używać do deklarowania wskaźników i odwołań do klasy abstrakcyjnej.

Klasa abstrakcyjna jest używana, jeśli chcesz zapewnić wspólną, zaimplementowaną funkcjonalność wśród wszystkich implementacji komponentu. Klasy abstrakcyjne pozwolą ci częściowo zaimplementować klasę, podczas gdy interfejsy nie będą miały żadnej implementacji dla żadnego elementu członkowskiego. Krótko mówiąc, klasy abstrakcyjne są dobrym rozwiązaniem, jeśli chcesz przekazać dzieciom szczegóły implementacji, ale nie chcesz pozwalać na bezpośrednie tworzenie instancji klasy.

40. Czym są statyczne elementy danych i statyczne funkcje składowe?

Statyczny element danych klasy jest normalnym elementem danych, ale jest poprzedzony statycznym słowem kluczowym. Wykonuje się przed funkcją main() w programie i jest inicjowana na 0, gdy tworzony jest pierwszy obiekt klasy. Jest widoczny tylko dla określonej klasy, ale jego zakres jest dożywotni.

Składnia:

  static Data_Type Data_Member;>

Statyczna funkcja członkowska to funkcja członkowska używana w celu uzyskania dostępu do innych statycznych składowych danych lub innych statycznych funkcji składowych. Jest również definiowany za pomocą statycznego słowa kluczowego. Dostęp do statycznej funkcji członkowskiej możemy uzyskać za pomocą nazwy klasy lub obiektów klasy.

int na ciąg znaków w Javie

Składnia:

classname::function name(parameter);>

Pytania do rozmowy kwalifikacyjnej C++ – poziom ekspercki

41. Jakie jest główne zastosowanie słowa kluczowego Volatile?

Podobnie jak w przypadku nazwy, wszystko może zmienić się nagle i niespodziewanie; Służy zatem do informowania kompilatora, że ​​wartość może zmienić się w dowolnym momencie. Ponadto słowo kluczowe volatile uniemożliwia kompilatorowi optymalizację kodu. Miał być używany podczas łączenia się ze sprzętem mapowanym w pamięci, procedurami obsługi sygnałów i instrukcjami kodu maszynowego.

Aby uzyskać więcej informacji, zapoznaj się z tym Lotny

42. Zdefiniuj klasę pamięci w C++ i podaj kilka nazw

Klasa pamięci służy do definiowania cech (czasu życia i widoczności) zmiennej lub funkcji. Funkcje te zwykle pomagają w śledzeniu istnienia zmiennej w czasie wykonywania programu.

Składnia:

storage_class var_data_type var_name;>

Niektóre typy klas przechowywania:

Przykłady klas przechowywania

Aby uzyskać więcej informacji, zobacz Klasa przechowywania

43. Co to jest zmienny specyfikator klasy pamięci? Jak można je wykorzystać?

Podobnie jak jego nazwa, specyfikator klasy pamięci mutable jest używany tylko w elemencie danych klasy, aby umożliwić jego modyfikację, nawet jeśli element ten jest częścią obiektu zadeklarowanego jako const. Elementy członkowskie statyczne, const lub referencyjne nie mogą używać specyfikatora mutable. Kiedy deklarujemy funkcję jako const, wskaźnik przekazany do funkcji staje się const.

44. Zdefiniuj zmienną zasięgu bloku.

Zatem zakres zmiennej to region, w którym zmienna jest dostępna. Istnieją dwa regiony zasięgu: globalny i blokowy lub lokalny.

Zmienna o zasięgu blokowym jest również nazywana zmienną o zasięgu lokalnym. Zmienna zdefiniowana wewnątrz funkcji (np. main) lub wewnątrz bloku (np. pętli i bloków if) jest zmienną lokalną. Można go używać TYLKO wewnątrz tej konkretnej funkcji/bloku, w którym jest zadeklarowany. zmienna o zasięgu blokowym nie będzie dostępna poza blokiem, nawet jeśli blok znajduje się wewnątrz funkcji.

Aby uzyskać więcej informacji, zobacz Zakres zmiennej

45. Jaka jest funkcja słowa kluczowego Auto?

Słowo kluczowe auto może zostać użyte do prostego zadeklarowania zmiennej typu złożonego. Możesz użyć auto do zadeklarowania zmiennej, jeśli fraza inicjująca zawiera szablony, wskaźniki do funkcji, odniesienia do elementów itp. Dzięki możliwościom wnioskowania o typach możemy spędzać mniej czasu na konieczności zapisywania rzeczy, które kompilator już zna. Ponieważ wszystkie typy są dedukowane tylko w fazie kompilatora, czas kompilacji nieznacznie się wydłuża, ale nie ma to wpływu na czas wykonania programu.

Aby uzyskać więcej informacji, zobacz Samochody w C++

46. ​​Zdefiniuj przestrzeń nazw w C++.

Przestrzenie nazw umożliwiają nam organizowanie nazwanych elementów, które w przeciwnym razie miałyby zasięg globalny, w mniejsze zakresy, co pozwala nam nadawać im zakres przestrzeni nazw. Umożliwia to organizowanie części programu w odrębne logiczne zakresy z nazwami. Przestrzeń nazw zapewnia miejsce do definiowania lub deklarowania identyfikatorów, takich jak zmienne, metody i klasy.

Można też powiedzieć, że przestrzeń nazw jest strefą deklaratywną, która nadaje zakres znajdującym się w niej identyfikatorom (nazwom typów, funkcji, zmiennych itd.). Przestrzenie nazw służą do porządkowania kodu w logiczne kategorie i do unikania konfliktów nazw, które mogą się zdarzyć, jeśli w bazie kodu znajduje się wiele bibliotek.

Aby uzyskać więcej informacji, zobacz Przestrzeń nazw w C++

47. Kiedy używany jest typ zwracany typu void()?

Słowo kluczowe void użyte jako typ zwracany funkcji wskazuje, że funkcja nie zwraca wartości. Wartość void używana jako lista parametrów funkcji wskazuje, że funkcja nie przyjmuje żadnych parametrów. Funkcje nie zwracające wartości są również nazywane funkcjami pustymi. Nazywa się je void, ponieważ nie mają na celu niczego zwracać. To prawda, ale tylko częściowo. Nie możemy zwrócić wartości z funkcji void, ale z pewnością możemy coś zwrócić. Chociaż funkcje void nie mają typu zwracanego, mogą zwracać wartości.

Aby uzyskać więcej informacji, zobacz Unieważnij typ zwrotu .

48. Jaka jest różnica między kopią płytką a kopią głęboką?

Płytka kopia

Głęboka kopia

W przypadku płytkiej kopii przechowywana jest kopia oryginalnego obiektu i ostatecznie kopiowany jest tylko adres referencyjny. Mówiąc najprościej, płytka kopia powiela tak mało, jak to możliweW trybie głębokiej kopii przechowywana jest zarówno kopia oryginalnego obiektu, jak i kopie powtarzalne. Krótko mówiąc, głęboka kopia duplikuje wszystko
Płytka kopia kolekcji jest kopią struktury kolekcji, a nie jej elementów. Dzięki płytkiemu egzemplarzowi dwie kolekcje mają teraz wspólne elementy.Głęboka kopia kolekcji to dwie kolekcje, w których wszystkie elementy oryginalnej kolekcji są zduplikowane.
Płytka kopia jest szybszaGłębokie kopiowanie jest stosunkowo wolniejsze.

Aby uzyskać więcej informacji, zobacz Płytka kopia VS głęboka kopia

49. Czy możemy wywołać funkcję wirtualną z konstruktora?

Tak, możemy wywołać funkcję wirtualną z konstruktora. Ale może zgłosić wyjątek przesłaniania.

50. Czym są wskaźniki pustki?

Podobnie jak jego nazwa, wskaźnik void jest wskaźnikiem, który nie jest powiązany z niczym ani z żadnym typem danych. Niemniej jednak wskaźnik pustki może przechowywać wartość adresu dowolnego typu i można go konwertować z jednego typu danych na inny.

Więcej informacji dotyczy Wskaźnik pustego w C++

Pytanie bonusowe:

Co jest ' Ten wskaźnik w C++?

Ten pointer umożliwia każdemu obiektowi dostęp do własnego adresu poprzez niezbędny wskaźnik. Wszystkie funkcje członkowskie przyjmują Ten wskaźnik jako ukryty argument. Ten wskaźnik może być używany w odniesieniu do obiektu wywołującego w ramach funkcji członkowskiej.

  • Ten wskaźnik służy do przekazywania obiektu jako parametru do innej metody.
  • Każdy obiekt otrzymuje własną kopię elementu danych.
  • Ten wskaźnik służy do deklarowania indeksatorów.

Aby uzyskać więcej informacji, zobacz Ten wskaźnik w C++