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.

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++ :
- C++ to język OOP, co oznacza, że dane są traktowane jako obiekty.
- C++ jest językiem wieloparadygmatowym; W uproszczeniu oznacza to, że możemy zaprogramować logikę, strukturę i procedurę programu.
- Zarządzanie pamięcią jest kluczową funkcją w C++, ponieważ umożliwia dynamiczną alokację pamięci
- 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++?

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ące | Przekazane 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:
- Słowa kluczowe – Które mają specjalne znaczenie dla kompilatora
- Identyfikatory – Które posiadają unikalną wartość/tożsamość
- Stałe – Które nigdy nie zmieniają swojej wartości w trakcie trwania programu
- Smyczki – Zawiera jednorodną sekwencję danych
- Symbole specjalne – mają jakieś specjalne znaczenie i nie można ich używać w innym celu; np: [] () {}, ; * = #
- 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ów | Jest 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ów | Obsługuje odpowiednio Przeciążanie Funkcji i Operatora |
| Jest to język oparty na funkcjach | Jest 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 publicznym | Czł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ów | Pamięć 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 odniesienia | Wartość wskaźnika można ponownie przypisać |
| Nigdy nie może pomieścić zero value, ponieważ potrzebuje istniejącej wartości, aby stać się aliasem | Może trzymać lub wskazywać na zero wartość i być określane jako nullptr Lub wskaźnik zerowy |
| Nie może działać z tablicami | Moż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 funkcji | Zasadniczo 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ów | Polimorfizm 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:
| Przykład przeciążenia operatora:
|
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ściem | Pętla „do-while” nazywana jest pętlą kontroli wyjścia |
| Jeśli warunek nie jest spełniony, instrukcje wewnątrz pętli nie zostaną wykonane | Nawet 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 operandem | Oznacza 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ów | malloc nie może wywołać konstruktora |
| new jest szybszy niż malloc, ponieważ jest operatorem | malloc jest wolniejszy niż nowy, ponieważ jest funkcją |
| new zwraca dokładny typ danych | malloc 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.

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:
- Polimorfizm czasu kompilacji
- Przeciążenie funkcji
- Przeciążenie operatora
- 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
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++ 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:
- Zwiększanie/zmniejszanie wskaźnika
- Dodawanie i odejmowanie liczby całkowitej do wskaźnika
- 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 tablicy | Sł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ów | Sł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ów | Moż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ń:
- Aby uzyskać dostęp do zmiennej globalnej, gdy istnieje zmienna lokalna o tej samej nazwie
- Aby zdefiniować funkcję poza klasą
- W przypadku dziedziczenia wielokrotnego
- 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:
- Prywatny – Nie można uzyskać do niego dostępu ani go przeglądać spoza klasy
- Chronione – Można uzyskać do niego dostęp wtedy i tylko wtedy, gdy akcesor jest klasą pochodną
- 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.

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żliwe | W 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 szybsza | Głę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++