logo

Otázky a odpovědi na pohovor v C++ (2024)

C++ – nezbytný a oblíbený programovací jazyk kodérů. Je stále aktuální, jako tomu bylo v polovině 80. let. Jako univerzální a objektově orientovaný programovací jazyk je široce používán většinou při každém kódování. V důsledku toho některé pracovní role vyžadují, aby jednotlivci ovládali jazyk C++. Využívají jej špičkové IT společnosti jako např Evernote, LinkedIn, Microsoft, Opera, NASA , a Meta díky své spolehlivosti, výkonu a široké škále nastavení, ve kterých může být použit. Takže, abyste se dostali do těchto společností, musíte v nich být důkladní 50 nejlepších otázek na pohovor v C++ díky čemuž můžete před personalisty vypadat jako expert.

50 nejlepších otázek k pohovoru v C++ pro začátečníky a zkušené (2022)

Abyste byli připraveni na rozhovor, přinesli jsme 50 nejlepších otázek k pohovoru v C++ začátečník, středně pokročilý a zkušený kterou musíte rozhodně projít, abyste se umístili mezi nejlepšími nadnárodními společnostmi.

Otázky k pohovoru v C++ pro začátečníky

1. Co je C++? Jaké jsou výhody C++?

C++ je objektově orientovaný programovací jazyk, který byl zaveden, aby překonal jurisdikce, kde C chybělo. Objektově orientovaným rozumíme, že pracuje s konceptem polymorfismus , dědictví , abstrakce , zapouzdření , objekt a třída .



Výhody C++ :

  1. C++ je jazyk OOPs, což znamená, že data jsou považována za objekty.
  2. C++ je multiparadigmatický jazyk; Zjednodušeně to znamená, že můžeme naprogramovat logiku, strukturu a proceduru programu.
  3. Správa paměti je klíčovou funkcí v C++, protože umožňuje dynamické přidělování paměti
  4. Je to programovací jazyk střední úrovně, což znamená, že může vyvíjet hry, desktopové aplikace, ovladače a jádra

Více informací naleznete v článku – Jaké jsou výhody C++?

2. Jaké jsou různé datové typy přítomné v C++?

datové typy v C++

Různé typy datových typů v C++

Další informace viz ' std' je také známý jako standardní nebo jej lze interpretovat jako jmenný prostor. Příkaz pomocí jmenného prostoru std informuje kompilátor, aby přidal vše pod std jmenný prostor a vštípit je do globální jmenný prostor . Toto veškeré vštěpování globálního jmenného prostoru nám přináší výhody cout a jíst bez použití std::_operator_.

Další informace viz jmenný prostor a std .

4. Co jsou odkazy v C++?

Když je proměnná popsána jako reference, stává se aliasem již existující proměnné. Jednoduše řečeno, odkazovaná proměnná je další pojmenovaná proměnná existující proměnné, přičemž je třeba mít na paměti, že změny provedené v referenční proměnné se projeví v již existující proměnné. Referenční proměnné předchází a '&' symbol.

Syntax:

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

Další informace viz odkazy v C++

5. Co rozumíte pod pojmem Call by Value a Call by Reference?

V tomto programovacím jazyce pro volání funkce máme 2 metody: Volejte podle hodnoty a Volejte podle reference

Volejte podle hodnoty

Volejte podle reference

Je předána kopie proměnné.Samotná proměnná je zásadně předána.
Volání funkce odesláním hodnot zkopírováním proměnných.Volání funkce odesláním adresy předané proměnné.
Změny provedené ve funkci se nikdy neprojeví mimo funkci na proměnné. Stručně řečeno, původní hodnota se v Call by Value nikdy nezmění.Změny provedené ve funkcích lze vidět mimo funkci na předané funkci. Stručně řečeno, původní hodnota je změněna v Call odkazem.
Předané aktuální a formální parametry jsou uloženy v různých paměťových místech. Proto volání podle hodnoty trochu paměti nestačíPředané aktuální a formální parametry jsou uloženy na stejném paměťovém místě. Proto je Call by Reference o něco efektivnější z hlediska paměti.

Další informace viz rozdíl mezi voláním podle hodnoty a voláním podle reference

6. Definujte token v C++

Token je nejmenší jednotlivý prvek programu, kterému rozumí kompilátor. Token obsahuje následující:

  1. Klíčová slova – které mají pro kompilátor zvláštní význam
  2. Identifikátory – které mají jedinečnou hodnotu/totožnost
  3. Konstanty – To nikdy nemění jejich hodnotu v průběhu programu
  4. Struny – Obsahuje homogenní posloupnost dat
  5. Speciální symboly – Mají nějaký zvláštní význam a nelze je použít k jinému účelu; např: [] () {}, ; * = #
  6. Operátoři – Kdo provádí operace s operandem

Další informace viz Tokeny v C++

7. Jaký je rozdíl mezi C a C++?

C

C++

Je to procedurální programovací jazyk. Jednoduše řečeno, nepodporuje třídy a objektyJedná se o směs procedurálních a objektově orientovaných programovacích jazyků. Jednoduše řečeno, podporuje třídy a objekty.
Nepodporuje žádné koncepty OOP, jako je polymorfismus, abstrakce dat, zapouzdření, třídy a objekty.Podporuje všechny koncepty dat
Nepodporuje přetížení funkcí a operátorůPodporuje funkci a přetížení operátora
Je to funkčně řízený jazykJe to objektově řízený jazyk

Další informace viz Rozdíl mezi C a C++

8. Jaký je rozdíl mezi strukturou a třídou?

Struktura

Třída

Členové struktury jsou vždy ve výchozím nastavení veřejný režimČlenové třídy mohou být v soukromém, chráněném a veřejném režimu.
Struktury jsou hodnotového typu. Uchovávají hodnotu pouze v paměti.Třídy jsou referenčního typu. Obsahuje odkaz na objekt v paměti.
Paměť ve strukturách je uložena jako zásobníkyPaměť ve třídách je uložena jako hromady.

Další informace naleznete v části Rozdíl mezi strukturou a třídou.

9. Jaký je rozdíl mezi referencí a ukazatelem?

Odkaz

Java string builder

Ukazatel

Hodnotu reference nelze znovu přiřaditHodnotu ukazatele lze znovu přiřadit
Nikdy nemůže držet a nula hodnotu, protože potřebuje existující hodnotu, aby se stala aliasemMůže držet nebo ukazovat na a nula hodnotu a být označen jako a nullptr nebo nulový ukazatel
Nemůže pracovat s poliUmí pracovat s poli
Pro přístup k členům třídy/struktury používá „ . 'Pro přístup k členům třídy/struktury používá „ -> '
K referenčnímu umístění v paměti lze snadno přistupovat nebo jej lze přímo použítK umístění v paměti ukazatele nelze snadno přistupovat, protože musíme použít dereference ‘ * '

Další informace naleznete v části Rozdíl mezi referencí a ukazatelem

10. Jaký je rozdíl mezi přetížením funkcí a přetížením operátora?

Přetížení funkcí

Přetížení operátora

V podstatě jde o definování funkce mnoha způsoby, takže existuje mnoho způsobů, jak ji volat, nebo jednoduše řečeno, máte několik verzí stejné funkceV zásadě jde o praktikování přidělování zvláštního významu existujícímu významu operátoru nebo jednoduše předefinování předem předefinovaného významu.
Parametrizované funkce jsou dobrým příkladem přetížení funkcí, protože pouhou změnou argumentu nebo parametru funkce je užitečná pro různé účely.Polymorfismus je dobrým příkladem přetížení operátora, protože objekt třídy alokací může být použit a volán různými třídami pro různé účely.

Příklad přetížení funkcí:

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

Příklad přetížení operátora:

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

Další informace viz Přetížení operátora a Přetížení funkcí

11. Jaký je rozdíl mezi polem a seznamem?

Pole

Seznamy

Pole jsou souvislá paměťová místa homogenních datových typů uložená v pevném umístění nebo velikosti.Seznamy jsou klasické jednotlivé prvky, které na sebe navazují nebo navazují pomocí ukazatelů a nemají pevnou velikost.
Pole jsou statické povahy.Seznamy mají dynamický charakter
Využívá méně paměti než propojené seznamy.Využívá více paměti, protože musí uložit hodnotu a umístění v paměti ukazatele

Další informace viz Pole vs seznam

12. Jaký je rozdíl mezi smyčkou while a smyčkou do-while?

Zatímco smyčka

do-while Loop

Smyčka While se také nazývá smyčka řízená vstupemSmyčka do-while se nazývá výstupní řídicí smyčka
Pokud podmínka není splněna, příkazy uvnitř smyčky se nevykonajíI když podmínka není splněna, příkazy uvnitř smyčky se provedou alespoň jednou

Příklad smyčky while:

zatímco (podmínka)

{příkazy k provedení;};

Příklad smyčky do-while:

udělat {

příkazy, které mají být provedeny;

} while(podmínka nebo výraz);

Další informace naleznete v části Rozdíl mezi smyčkou while a do-while

13. Diskutujte o rozdílu mezi prefixem a postfixem?

předpona

postfix

Jednoduše to znamená umístit operátora před operandJednoduše to znamená umístit operátora za operand
Předtím se spustí '; ' Spustí se poté '; '
Asociativita prefixu ++ je zprava dolevaAsociativita postfixu ++ je zleva doprava

Další informace naleznete v části Rozdíl mezi prefixem a postfixem

14. Jaký je rozdíl mezi new a malloc()?

Nový

malloc()

chyba atributu python
nový je operátor, který provádí operacimalloc je funkce, která vrací a přijímá hodnoty
new volá konstruktorymalloc nemůže volat konstruktor
new je rychlejší než malloc, protože je operátoremmalloc je pomalejší než nový, protože jde o funkci
new vrátí přesný datový typmalloc vrací neplatný*

Další informace viz Rozdíl mezi new a malloc()

15. Jaký je rozdíl mezi virtuálními funkcemi a čistě virtuálními funkcemi?

Virtuální funkce

Čistá virtuální funkce

Virtuální funkce je členská funkce základní třídy, kterou lze předefinovat v jiné odvozené třídě.Čistá virtuální funkce je členská funkce základní třídy, která je deklarována pouze v základní třídě a definována v odvozené třídě, aby se z ní nestala abstraktní třída.
Virtuální funkce má svou definici ve své příslušné základní třídě.V Pure Virtual Function neexistuje žádná definice a je inicializována čistým specifikátorem (= 0).
Základní třída má virtuální funkci, která může být reprezentována nebo instance; Jednoduše řečeno, jeho předmět lze vyrobit.Základní třída s čistě virtuální funkcí se stává abstraktní, kterou nelze reprezentovat nebo instanci; Jednoduše řečeno to znamená, že jeho předmět nelze vyrobit.

Další informace naleznete v části Rozdíl mezi virtuálními funkcemi a čistě virtuálními funkcemi

16. Co jsou třídy a objekty v C++?

Třída je uživatelsky definovaný datový typ, kde jsou všechny členské funkce a datové členy šité na míru podle požadavků a požadavků, navíc k nim lze přistupovat pomocí objekt . K deklaraci uživatelem definovaného datového typu používáme klíčové slovo třída.

Objekt je instancí třídy a entity s hodnotou a stavem; Jednoduše řečeno, používá se jako katalyzátor nebo k reprezentaci člena třídy. Může obsahovat jiné parametry nebo žádné.

Poznámka: Třída je plán, který definuje funkce, které objekt používá.

Další informace naleznete zde Co jsou třídy a objekty

17. Co je funkce Overriding?

Když je v odvozené třídě použita funkce se stejným názvem, stejnými argumenty nebo parametry a stejným návratovým typem, který je již přítomen/deklarován v základní třídě, nazývá se to funkce Overriding. Je to příklad Runtime Polymorphism nebo Late Binding, což znamená, že přepsaná funkce bude provedena v době běhu provádění.

Další informace viz Přepisování funkcí v C++

18. Jaké jsou různé koncepty OOP v C++?

  • Třídy : Je to uživatelsky definovaný datový typ
  • Objekty : Je to instance třídy
  • Abstrakce: Je to technika zobrazení pouze nezbytných detailů
  • Zapouzdření: Zabalení dat do jedné jednotky
  • Dědictví: Schopnost třídy odvozovat vlastnosti a charakteristiky z jiné třídy
  • Polymorfismus: Polymorfismus je znám jako mnoho forem stejné věci

Další informace viz Různé koncepty OOP v C++

19. Vysvětlete dědičnost

Schopnost nebo schopnost třídy odvozovat vlastnosti a charakteristiky z jiné třídy se nazývá dědičnost. Jednoduše řečeno, je to systém nebo technika opětovného použití a rozšíření existujících tříd bez jejich modifikace.

Další informace viz Dědictví

20. Kdy bychom měli použít vícenásobnou dědičnost?

Vícenásobná dědičnost znamená, že odvozená třída může zdědit dvě nebo více základních/nadřazených tříd. Je to užitečné, když odvozená třída potřebuje kombinovat četné atributy/smlouvy a zdědit část nebo celou implementaci z těchto atributů/smluv. Chcete-li vzít příklad ze skutečného života, zvažte své rodiče, kde rodič A je váš TÁTA Rodič B je vaše MÁMA a dítě C jste vy.

vícenásobná dědictví

Vícenásobná dědictví

Další informace viz Vícenásobná dědičnost .

21. Co je virtuální dědictví?

Virtuální dědičnost je technika, která zajišťuje, že třídy odvozené od vnuků zdědí pouze jednu kopii členských proměnných základní třídy. Nebo zjednodušeně řečeno, virtuální dědičnost se používá, když se zabýváme situací více dědičnosti, ale chceme zabránit tomu, aby se v hierarchii dědičnosti objevilo více instancí stejné třídy.

22. Co je to polymorfismus v C++?

Polymorfismus je znám jako mnoho forem stejné věci. Zjednodušeně lze říci, že polymorfismus je schopnost zobrazit členskou funkci ve více formách v závislosti na typu objektu, který je volá.

Jinými slovy, můžeme také říci, že muž může být pro někoho zaměstnancem, synem někoho, otcem někoho a manželem někoho; takto lze promítat polymorfismus v reálném životě.

Existují 2 typy polymorfismu:

  1. Polymorfismus času kompilace
    • Přetížení funkcí
    • Přetížení operátora
  2. Polymorfismus doby běhu
    • Přepsání funkcí
    • Virtuální funkce

Chcete-li se o tom dozvědět více, viz Polymorfismus

23. Jaké jsou různé typy polymorfismu v C++?

Existují 2 typy polymorfismu

Polymorfismus času kompilace nebo statická vazba

Tento typ polymorfismu je dosažen během kompilace programu, což má za následek, že je o něco rychlejší než Run time. Dědičnost do toho také není zapojena. Skládá se z 2 další techniky :

Přetížení funkcí: Pokud existuje více funkcí se stejným názvem, ale různými parametry, nazývá se to přetížení funkcí.

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


Přetížení operátora: V zásadě jde o praktikování přidělování zvláštního významu existujícímu významu operátoru nebo jednoduše předefinování předem předefinovaného významu.

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

Run-time polymorfismus nebo pozdní vazba

Polymorfismus za běhu nastává, když jsou funkce vyvolány během běhu.

Přepsání funkce: K přepsání funkce dochází, když je členská funkce základní třídy předefinována v odvozené třídě se stejnými argumenty a návratovým typem.

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

Výstup:

Function of derived class>

Další informace viz Různé typy polymorfismu

24. Porovnejte polymorfismus v době kompilace a polymorfismus v době běhu

Polymorfismus v době kompilace

Polymorfismus za běhu

java architektura
Označuje se také jako statická vazba a časná vazba.Označuje se také jako dynamická vazba a pozdní vazba.
Je to rychlé, protože provedení je známé již v době kompilace.Je to pomalé ve srovnání s dobou kompilace, protože spuštění je známé za běhu.
Toho je dosaženo přetížením funkcí a přetížením obsluhy.Toho je dosaženo pomocí virtuálních funkcí a přepisování funkcí.

Další informace viz Polymorfismus v době kompilace a polymorfismus za běhu

25. Vysvětlete konstruktor v C++.

Konstruktor je speciální typ členské funkce třídy, jejíž jméno je stejné jako jméno třídy, kterou je vyvoláno, a inicializuje hodnotu objektu třídy.

Existují 3 typy konstruktorů:

A. Výchozí konstruktor: Je to nejzákladnější typ konstruktoru, který nepřijímá žádné argumenty ani parametry. I když není volán, kompilátor jej volá automaticky, když je vytvořen objekt.

Příklad:

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


B. Parametrizovaný konstruktor: Je to typ konstruktoru, který přijímá argumenty nebo parametry. Musí být volána explicitně předáním hodnot v argumentech, protože tyto argumenty pomáhají inicializovat objekt, když je vytvořen. Má také stejný název jako třída.

Také se používá k přetížení konstruktorů.

Příklad:

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

Výstup

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

C. Kopírovat konstruktor: Kopírovací konstruktor je členská funkce, která inicializuje objekt pomocí jiného objektu stejné třídy. Konstruktor Copy také bere jako argument odkaz na objekt stejné třídy.

Příklad:

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


Další informace viz Konstruktéři

26. Co jsou destruktory v C++?

Destruktory jsou členy funkcí ve třídě, které odstraní objekt, když objekt třídy překročí rozsah. Destruktory mají stejný název jako třída, před kterým je znak vlnovky (~). Také destruktory následují a až nahoru na rozdíl od konstruktérů, kteří postupují shora dolů.

Syntax:

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

Další informace viz ničitel .

27. Co je virtuální destruktor?

Při ničení instancí nebo objektů odvozené třídy pomocí objektu ukazatele základní třídy je vyvolán virtuální destruktor, aby se uvolnil paměťový prostor přidělený objektem nebo instancí odvozené třídy.

Virtuální destruktor zaručuje, že nejprve je zavolán destruktor odvozené třídy. Poté je zavolán destruktor základní třídy, aby uvolnil místo obsazené oběma destruktory v dědičné třídě, což nás ušetří před únikem paměti. Je doporučeno, aby byl váš destruktor virtuální, kdykoli je vaše třída polymorfní.

Další informace viz Virtuální ničitel

28. Je možné přetížení destruktoru? Pokud ano, vysvětlete a pokud ne, tak proč?

Jednoduchá odpověď je NE nemůžeme přetížit destruktor. V C++ je povinné používat pouze destruktor na třídu. Také je třeba zmínit, že Destructor nebere argumenty ani nemá parametr, který by mohl pomoci k přetížení.

Otázky k pohovoru v C++ – středně pokročilá úroveň

29. Které operace jsou povoleny s ukazateli?

Ukazatele jsou proměnné, které se používají k uložení umístění adresy jiné proměnné. Operace, které jsou povoleny pro ukazatel, jsou:

  1. Zvýšení/snížení ukazatele
  2. Sčítání a odčítání celého čísla k ukazateli
  3. Porovnání ukazatelů stejného typu

30. Jaký je účel vymazat operátor?

Operátor delete se používá k odstranění/odstranění všech charakteristik/vlastností z objektu uvolněním jeho paměti; navíc nakonec vrátí true nebo false. Jednoduše řečeno, ničí nebo uvolňuje objekty pole a nepole (ukazatel), které jsou vytvořeny novými výrazy.

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

Další informace viz Smazat operátora

31. Jak se delete [] liší od delete?

vymazat[]

vymazat

Používá se pro smazání celého polePoužívá se k odstranění pouze jednoho jediného ukazatele
Používá se pro mazání objektů Nový[]; Tímto můžeme říci, že vymazat[] se používá k odstranění pole objektůPoužívá se pro mazání objektů Nový; Tímto můžeme říci, že vymazat se používá k odstranění jednoho objektu
Může zavolat tolik destruktorů, kolik chceMůže volat destruktor třídy pouze jednou

32. Co víte o třídě přátel a funkci přátel?

Třída přátel je třída, která má přístup k chráněným i soukromým proměnným tříd, kde je deklarována jako přítel.

Příklad třídy přátel:

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


Funkce přítele je funkce používaná pro přístup k soukromým, chráněným a veřejným datovým členům nebo členským funkcím jiných tříd. Je deklarováno pomocí klíčového slova friend. Výhodou funkce přítele je, že není vázána na rozsah třídy a jakmile je deklarována ve třídě, navíc nemůže být volána objektem třídy; proto jej lze volat jinými funkcemi. Vzhledem ke všem zmíněným bodům můžeme říci, že funkce přítele je globální funkcí .

Příklad funkce přítele:

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


Další informace naleznete v části funkce přátel a třída přátel

33. Co je chyba přetečení?

Chyba přetečení nastane, když je číslo příliš velké, než aby jej datový typ zpracoval. Jednoduše řečeno, je to typ chyby, který je platný pro definovaný, ale překračuje použitý definovaný rozsah, kde by se měl shodovat/lehat.

Například rozsah datového typu int je –2 147 483 648 na 2,147,483,647 a pokud deklarujeme proměnnou velikosti 2,247,483,648 bude generovat chybu přetečení.

34. Co dělá operátor Scope Resolution?

Operátor rozlišení rozsahu je označen „ :: symbol ‘. Stejně jako jeho název tento operátor řeší bariéru rozsahu v programu. Operátor rozlišení rozsahu se používá k odkazování na členskou funkci nebo globální proměnnou mimo jejich rozsah, ke které může také přistupovat ke skryté proměnné nebo funkci v programu.

Rozlišení rozsahu se používá pro velké množství úkolů:

  1. Pro přístup ke globální proměnné, když existuje lokální proměnná se stejným názvem
  2. Chcete-li definovat funkci mimo třídu
  3. V případě vícenásobného dědictví
  4. Pro jmenný prostor

Další informace viz Operátor rozlišení rozsahu

35. Co jsou modifikátory přístupu C++?

Omezení přístupu určené členům třídy (ať už jde o členskou funkci nebo datový člen) je známé jako modifikátory/specifikátory přístupu.

Modifikátory přístupu jsou 3 typů:

abeceda s čísly
  1. Soukromé – Nelze k ní přistupovat ani ji nelze prohlížet mimo třídu
  2. Chráněný - Lze k němu přistupovat tehdy a pouze tehdy, je-li přístupovým objektem odvozená třída
  3. Veřejné – Lze k němu přistupovat nebo jej prohlížet mimo třídu

Další informace viz Modifikátory přístupu

36. Dokážete sestavit program bez hlavní funkce?

Ano, je absolutně možné zkompilovat program bez main(). Například použijte makra, která definují hlavní

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

Další informace viz Dokážete zkompilovat program bez hlavní funkce

37. Co je STL?

STL je známá jako Standard Template Library, je to knihovna, která poskytuje 4 komponenty jako kontejner, algoritmy a iterátory.

C++ STL

Další informace viz STL v C++

38. Definujte inline funkci. Můžeme mít v C++ rekurzivní inline funkci?

Inline funkce je forma požadavku, nikoli příkaz kompilátoru, což má za následek vložení naší funkce do těla hlavní funkce. Inline funkce se může stát režií, pokud je doba provedení funkce kratší než doba přepnutí z funkce volajícího na volanou funkci. Chcete-li funkci vložit, použijte klíčové slovo v souladu před a definujte funkci před jakýmkoli voláním funkce.

Funkce Inline

Inline Vysvětlení funkce

Syntax:

inline data_type function_name() { Body; }>

Odpověď je Ne; Nemůže být rekurzivní.

Inline funkce nemůže být rekurzivní, protože v případě inline funkce je kód pouze umístěn na pozici, odkud je volán, a neuchovává v zásobníku informaci, která je nezbytná pro rekurzi.

Navíc, pokud napíšete klíčové slovo inline před rekurzivní funkci, kompilátor jej bude automaticky ignorovat, protože inline je brán pouze jako návrh kompilátoru.

Další informace viz Funkce Inline

39. Co je abstraktní třída a kdy ji používáte?

Abstraktní třída je třída, která je speciálně navržena pro použití jako základní třída. Abstraktní třída obsahuje alespoň jednu čistě virtuální funkci. Čistě virtuální funkci deklarujete pomocí a čistý specifikátor(= 0) v deklaraci virtuální členské funkce v deklaraci třídy

Nemůžete použít abstraktní třídu jako typ parametru, návratový typ funkce nebo typ explicitní konverze, ani nemůžete deklarovat objekt abstraktní třídy. Lze jej však použít k deklaraci ukazatelů a odkazů na abstraktní třídu.

Abstraktní třída se používá, pokud chcete poskytnout společnou implementovanou funkčnost mezi všemi implementacemi komponenty. Abstraktní třídy vám umožní částečně implementovat vaši třídu, zatímco rozhraní by neměla žádnou implementaci pro žádné členy. Jednoduše řečeno, abstraktní třídy se hodí, pokud chcete svým dětem poskytnout podrobnosti o implementaci, ale nechcete povolit přímou instanci instance vaší třídy.

40. Co jsou statické datové členy a statické členské funkce?

Statický datový člen třídy je normální datový člen, kterému předchází statické klíčové slovo. Provádí se před main() v programu a je inicializován na 0, když je vytvořen první objekt třídy. Je viditelný pouze pro definovanou třídu, ale jeho rozsah je celoživotní.

Syntax:

  static Data_Type Data_Member;>

Statická členská funkce je členská funkce, která se používá pro přístup k jiným statickým datovým členům nebo jiným statickým členským funkcím. Je také definován pomocí statického klíčového slova. Ke statické členské funkci můžeme přistupovat pomocí názvu třídy nebo objektů třídy.

Syntax:

classname::function name(parameter);>

Otázky k pohovoru C++ – expertní úroveň

41. Jaké je hlavní použití klíčového slova Volatile?

Stejně jako jeho název se věci mohou změnit náhle a neočekávaně; Používá se tedy k informování kompilátoru, že hodnota se může kdykoli změnit. Nestálé klíčové slovo také brání kompilátoru v provádění optimalizace kódu. Byl zamýšlen pro použití při propojení s hardwarem mapovaným do paměti, obslužnými programy signálů a instrukcemi strojového kódu.

np.nuly

Další informace naleznete zde Nestálý

42. Definujte třídu úložiště v C++ a některé pojmenujte

Třída úložiště se používá k definování funkcí (životnost a viditelnost) proměnné nebo funkce. Tyto funkce obvykle pomáhají při sledování existence proměnné během běhu programu.

Syntax:

storage_class var_data_type var_name;>

Některé typy tříd úložiště:

Příklady skladovací třídy

Další informace viz Třída úložiště

43. Co je specifikátor třídy proměnlivého úložiště? Jak je lze použít?

Stejně jako jeho název se specifikátor třídy proměnlivého úložiště používá pouze na datovém členu třídy, aby byl modifikovatelný, i když je člen součástí objektu deklarovaného jako const. Statické nebo konstantní nebo referenční členy nemohou použít proměnlivý specifikátor. Když deklarujeme funkci jako const, tento ukazatel předaný funkci se stane const.

44. Definujte proměnnou Rozsah bloku.

Rozsah proměnné je tedy oblast, kde je proměnná přístupná. Existují dvě oblasti působnosti, A globální a blokové nebo místní.

Proměnná rozsahu bloku je také známá jako proměnná místního rozsahu. Proměnná, která je definována uvnitř funkce (jako hlavní) nebo uvnitř bloku (jako smyčky a bloky if), je lokální proměnná. Může být použit POUZE uvnitř té konkrétní funkce/bloku, ve kterém je deklarován. proměnná s rozsahem bloku nebude k dispozici mimo blok, i když je blok uvnitř funkce.

Další informace viz Rozsah proměnné

45. Jakou funkci má klíčové slovo Auto?

Klíčové slovo auto lze použít k deklaraci proměnné s komplexním typem přímočarým způsobem. Auto můžete použít k deklaraci proměnné, pokud inicializační fráze obsahuje šablony, ukazatele na funkce, odkazy na členy atd. Díky možnostem odvozování typu můžeme strávit méně času vypisováním věcí, které už kompilátor zná. Protože všechny typy jsou odvozeny pouze ve fázi kompilátoru, čas pro kompilaci se mírně prodlouží, ale neovlivní to běh programu.

Další informace viz Auta v C++

46. ​​Definujte jmenný prostor v C++.

Jmenné prostory nám umožňují organizovat pojmenované položky, které by jinak měly globální rozsah, do menších rozsahů, což nám umožňuje přidělit jim rozsah jmenného prostoru. To umožňuje organizovat části programu do odlišných logických oborů s názvy. Jmenný prostor poskytuje místo pro definování nebo deklaraci identifikátorů, jako jsou proměnné, metody a třídy.

Nebo bychom mohli říci, že jmenný prostor je deklarativní zóna, která dává identifikátorům (názvy typů, funkcí, proměnných atd.) v ní rozsah. Jmenné prostory se používají k uspořádání kódu do logických kategorií a k zabránění kolizím jmen, k nimž může dojít, když máte ve své kódové základně mnoho knihoven.

Další informace viz Jmenný prostor v C++

47. Kdy se používá návratový typ void()?

Klíčové slovo void při použití jako návratový typ funkce označuje, že funkce nevrací hodnotu. Při použití jako seznam parametrů pro funkci, void znamená, že funkce nebere žádné parametry. Funkce nevracející hodnotu jsou také známé jako funkce void. Říká se jim neplatné, protože nejsou navrženy tak, aby něco vracely. Pravda, ale jen částečně. Nemůžeme vrátit hodnoty z void funkcí, ale určitě můžeme něco vrátit. Ačkoli funkce void nemají návratový typ, mohou vracet hodnoty.

Další informace viz Neplatný návratový typ .

48. Jaký je rozdíl mezi mělkou a hlubokou kopií?

Mělká kopie

Deep Copy

V Mělké kopii se uloží kopie původního objektu a nakonec se zkopíruje pouze referenční adresa. Jednoduše řečeno, mělká kopie duplikuje co nejméněV Hluboké kopii se ukládá kopie původního objektu i opakované kopie. Jednoduše řečeno, Deep copy vše duplikuje
Mělká kopie kolekce je kopií struktury kolekce, nikoli prvků. S mělkou kopií nyní dvě kolekce sdílejí jednotlivé prvky.Hluboká kopie kolekce jsou dvě kolekce se všemi prvky původní kolekce duplikovanými.
Mělká kopie je rychlejšíHluboké kopírování je poměrně pomalejší.

Další informace viz Mělká kopie VS Deep Copy

49. Můžeme zavolat virtuální funkci z konstruktoru?

Ano, můžeme volat virtuální funkci z konstruktoru. Ale může vyvolat výjimku přepsání.

50. Co jsou ukazatele neplatnosti?

Stejně jako jeho název je i void ukazatel ukazatel, který není spojen s ničím ani s žádným datovým typem. Ukazatel void však může obsahovat hodnotu adresy libovolného typu a lze jej převést z jednoho datového typu na jiný.

Více informací viz Void Ukazatel v C++

Bonusová otázka:

Co je ‚ tento ‘ukazatel v C++?

tento ukazatel umožňuje každému objektu mít přístup ke své vlastní adrese prostřednictvím základního ukazatele. Všechny členské funkce přebírají tento ukazatel jako implicitní argument. tento ukazatel lze použít k odkazování na volající objekt v rámci členské funkce.

  • tento ukazatel se používá k předání objektu jako parametru jiné metodě.
  • Každý objekt získá svou vlastní kopii datového členu.
  • tento ukazatel se používá k deklaraci indexerů.

Další informace viz tento ukazatel v C++