logo

Questions et réponses d'entretien C++ (2024)

C++ – le langage de programmation incontournable et préféré des codeurs. C’est toujours d’actualité comme c’était le cas au milieu des années 80. En tant que langage de programmation à usage général et orienté objet, il est largement utilisé principalement à chaque fois lors du codage. En conséquence, certains postes exigent que les individus maîtrisent le C++. Il est utilisé par les plus grandes sociétés informatiques telles que Evernote, LinkedIn, Microsoft, Opera, NASA , et Méta en raison de sa fiabilité, de ses performances et du large éventail de paramètres dans lesquels il peut être utilisé. Donc, pour entrer dans ces entreprises, vous devez être minutieux dans ces domaines. Top 50 des questions d'entretien en C++ ce qui peut vous faire passer pour un expert devant les recruteurs.

Top 50 des questions d'entretien C++ pour les débutants et les expérimentés (2022)

Pour vous préparer à un entretien, nous avons apporté le Top 50 des questions d'entretien C++ pour débutant, intermédiaire et expérimenté que vous devez absolument traverser pour vous placer parmi les meilleures multinationales.

Questions d'entretien C++ pour les débutants

1. Qu'est-ce que le C++ ? Quels sont les avantages du C++ ?

C++ est un langage de programmation orienté objet qui a été introduit pour combler les lacunes du C. Par orienté objet, nous entendons qu'il fonctionne avec le concept de polymorphisme , héritage , abstraction , encapsulation , objet et classe .



Avantages du C++ :

  1. C++ est un langage POO ce qui signifie que les données sont considérées comme des objets.
  2. C++ est un langage multi-paradigmes ; En termes simples, cela signifie que nous pouvons programmer la logique, la structure et la procédure du programme.
  3. La gestion de la mémoire est une fonctionnalité clé du C++ car elle permet une allocation dynamique de la mémoire.
  4. Il s'agit d'un langage de programmation de niveau intermédiaire, ce qui signifie qu'il peut développer des jeux, des applications de bureau, des pilotes et des noyaux.

Pour en savoir plus, reportez-vous à l’article – Quels sont les avantages du C++ ?

2. Quels sont les différents types de données présents en C++ ?

types de données en C++

Différents types de types de données en C++

Pour plus d'informations, reportez-vous à ' standard' est également connu sous le nom de Standard ou peut être interprété comme un espace de noms. La commande en utilisant l'espace de noms std informe le compilateur de tout ajouter sous le espace de noms std et les inculquer dans le espace de noms global . Toute cette inculcation de l'espace de noms global nous profite d'utiliser cout et manger sans utiliser std :: _operator_.

Pour plus d'informations, reportez-vous à espace de noms et std .

4. Que sont les références en C++ ?

Lorsqu'une variable est décrite comme référence, elle devient un alias de la variable déjà existante. En termes simples, une variable référencée est une autre variable nommée d'une variable existante en gardant à l'esprit que les modifications apportées à la variable de référence seront reflétées dans la variable déjà existante. Une variable de référence est précédée d'un '&' symbole.

Syntaxe:

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

Pour plus d'informations, reportez-vous à références en C++

5. Qu'entendez-vous par appel par valeur et appel par référence ?

Dans ce langage de programmation pour appeler une fonction nous avons 2 méthodes : Appel par valeur et Appel par référence

Appel par valeur

Appel par référence

Une copie d'une variable est transmise.Une variable elle-même est transmise fondamentalement.
Appeler une fonction en envoyant les valeurs en copiant des variables.Appel d'une fonction en envoyant l'adresse de la variable passée.
Les modifications apportées à la fonction ne sont jamais répercutées en dehors de la fonction sur la variable. En bref, la valeur d'origine n'est jamais modifiée dans Call by Value.Les modifications apportées aux fonctions sont visibles en dehors de la fonction sur la fonction passée. En bref, la valeur d'origine est modifiée dans Call by référence.
Les paramètres réels et formels transmis sont stockés dans différents emplacements de mémoire. Par conséquent, rendre Call by Value un peu de mémoire insuffisanteLes paramètres réels et formels transmis sont stockés dans le même emplacement mémoire. Par conséquent, rendre l’appel par référence un peu plus efficace en termes de mémoire.

Pour plus d'informations, reportez-vous à la différence entre l'appel par valeur et l'appel par référence

6. Définir le jeton en C++

Un jeton est le plus petit élément individuel d'un programme compris par un compilateur. Un jeton comprend les éléments suivants :

  1. Mots clés – Qui contiennent une signification particulière pour le compilateur
  2. Identifiants – Qui détiennent une valeur/identité unique
  3. Constantes – Qui ne changent jamais leur valeur tout au long du programme
  4. Cordes – Qui contient la séquence homogène de données
  5. Symboles spéciaux – Ils ont une signification particulière et ne peuvent être utilisés à d’autres fins ; par exemple: [] () {}, ; * = #
  6. Les opérateurs – Qui effectue les opérations sur l’opérande

Pour plus d'informations, reportez-vous à Jetons en C++

7. Quelle est la différence entre C et C++ ?

C

C++

C'est un langage de programmation procédural. En termes simples, il ne prend pas en charge les classes et les objetsIl s'agit d'un mélange de langages de programmation procéduraux et orientés objet. En termes simples, il prend en charge les classes et les objets.
Il ne prend en charge aucun concept de POO tel que le polymorphisme, l'abstraction de données, l'encapsulation, les classes et les objets.Il prend en charge tous les concepts de données
Il ne prend pas en charge la surcharge des fonctions et des opérateurs.Il prend en charge respectivement la surcharge des fonctions et de l'opérateur.
C'est un langage axé sur les fonctionsC'est un langage orienté objet

Pour plus d'informations, reportez-vous à Différence entre C et C++

8. Quelle est la différence entre une structure et une classe ?

Structure

Classe

Les membres de la structure sont toujours en mode public par défautLes membres de la classe peuvent être en modes privé, protégé et public.
Les structures sont du type valeur. Ils n’ont de valeur qu’en mémoire.Les classes sont de type référence. Il contient une référence d'un objet en mémoire.
La mémoire dans les structures est stockée sous forme de pilesLa mémoire des classes est stockée sous forme de tas.

Pour plus d'informations, reportez-vous au Différence entre structure et classe.

9. Quelle est la différence entre une référence et un pointeur ?

Référence

pointeurs en c

Aiguille

La valeur d'une référence ne peut pas être réaffectéeLa valeur d'un pointeur peut être réaffectée
Il ne pourra jamais contenir un nul valeur car il a besoin d’une valeur existante pour devenir un alias deIl peut contenir ou pointer vers un nul valeur et être qualifié de nullptr ou pointeur nul
Cela ne peut pas fonctionner avec des tableauxCela peut fonctionner avec des tableaux
Pour accéder aux membres de la classe/struct, il utilise un ' . 'Pour accéder aux membres de la classe/struct, il utilise un ' -> '
L'emplacement mémoire de référence est facilement accessible ou peut être utilisé directementL'emplacement mémoire d'un pointeur n'est pas accessible facilement car nous devons utiliser un déréférencement ' * '

Pour plus d'informations, reportez-vous au Différence entre référence et pointeur

10. Quelle est la différence entre la surcharge de fonctions et la surcharge d’opérateurs ?

Surcharge de fonctions

Surcharge de l'opérateur

Il s'agit essentiellement de définir une fonction de nombreuses manières, de sorte qu'il existe de nombreuses façons de l'appeler ou, en termes simples, vous disposez de plusieurs versions de la même fonction.Il s'agit essentiellement de s'entraîner à donner une signification particulière à la signification existante d'un opérateur ou, en termes simples, à redéfinir la signification prédéfinie.
Les fonctions paramétrées sont un bon exemple de surcharge de fonctions, car en modifiant simplement l'argument ou le paramètre d'une fonction, vous la rendez utile à différentes fins.Le polymorphisme est un bon exemple de surcharge d'opérateur car un objet de classe d'allocations peut être utilisé et appelé par différentes classes à des fins différentes.

Exemple de surcharge de fonctions :

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

Exemple de surcharge d'opérateur :

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

Pour plus d'informations, reportez-vous à Surcharge de l'opérateur et Surcharge de fonctions

11. Quelle est la différence entre un tableau et une liste ?

Tableaux

Listes

Les tableaux sont des emplacements de mémoire contigus de types de données homogènes stockés dans un emplacement ou une taille fixe.Les listes sont des éléments individuels classiques qui sont liés ou connectés les uns aux autres à l'aide de pointeurs et n'ont pas de taille fixe.
Les tableaux sont de nature statique.Les listes sont de nature dynamique
Utilise moins de mémoire que les listes chaînées.Utilise plus de mémoire car il doit stocker la valeur et l'emplacement mémoire du pointeur

Pour plus d'informations, reportez-vous à Tableaux vs liste

12. Quelle est la différence entre une boucle while et une boucle do-while ?

Boucle while

faire pendant que la boucle

La boucle While est également appelée boucle contrôlée par l'entrée.La boucle do-while est appelée boucle de contrôle de sortie
Si la condition n'est pas satisfaite, les instructions à l'intérieur de la boucle ne s'exécuteront pasMême si la condition n'est pas satisfaite, les instructions à l'intérieur de la boucle s'exécuteront au moins une fois.

Exemple d'une boucle while :

pendant que(état)

{instructions à exécuter;};

Exemple d'une boucle do while :

faire {

déclarations à exécuter;

} while(condition ou expression);

Pour plus d'informations, reportez-vous au Différence entre les boucles while et do-while

13. Discutez de la différence entre le préfixe et le suffixe ?

préfixe

suffixe

Cela revient simplement à mettre l'opérateur avant l'opérandeCela revient simplement à mettre l'opérateur après l'opérande
Il s'exécute avant '; ' Il s'exécute après '; '
L'associativité du préfixe ++ est de droite à gaucheL'associativité de postfix ++ est de gauche à droite

Pour plus d'informations, reportez-vous au Différence entre préfixe et suffixe

14. Quelle est la différence entre new et malloc() ?

nouveau

malloc()

new est un opérateur qui effectue une opérationmalloc est une fonction qui renvoie et accepte des valeurs
new appelle les constructeursmalloc ne peut pas appeler un constructeur
new est plus rapide que malloc car c'est un opérateurmalloc est plus lent que new car c'est une fonction
new renvoie le type de données exactmalloc renvoie vide*

Pour plus d'informations, reportez-vous à Différence entre nouveau et malloc()

15. Quelle est la différence entre les fonctions virtuelles et les fonctions virtuelles pures ?

Fonction virtuelle

Fonction virtuelle pure

Une fonction virtuelle est une fonction membre d'une classe de base qui peut être redéfinie dans une autre classe dérivée.Une fonction virtuelle pure est une fonction membre d'une classe de base qui est uniquement déclarée dans une classe de base et définie dans une classe dérivée pour l'empêcher de devenir une classe abstraite.
Une fonction virtuelle a sa définition dans sa classe de base respective.Il n'y a pas de définition dans Pure Virtual Function et est initialisé avec un spécificateur pur (= 0).
La classe de base possède une fonction virtuelle qui peut être représentée ou instanciée ; En termes simples, son objet peut être réalisé.Une classe de base ayant une fonction virtuelle pure devient abstraite qui ne peut être représentée ou instanciée ; En termes simples, cela signifie que son objet ne peut pas être réalisé.

Pour plus d'informations, reportez-vous au Différence entre les fonctions virtuelles et les fonctions virtuelles pures

16. Que sont les classes et les objets en C++ ?

Une classe est un type de données défini par l'utilisateur dans lequel toutes les fonctions membres et toutes les données membres sont personnalisées en fonction des demandes et des exigences. En outre, elles sont toutes accessibles à l'aide d'un objet . Pour déclarer un type de données défini par l'utilisateur, nous utilisons un mot-clé classe.

Un objet est une instance d'une classe et d'une entité avec une valeur et un état ; En termes simples, il est utilisé comme catalyseur ou pour représenter un membre du groupe. Il peut contenir différents paramètres ou aucun.

Note: Une classe est un modèle qui définit les fonctions utilisées par un objet.

Pour plus d'informations, reportez-vous à ceci Que sont les classes et les objets

17. Qu'est-ce que la substitution de fonction ?

Lorsqu'une fonction du même nom, des mêmes arguments ou paramètres et du même type de retour déjà présent/déclaré dans la classe de base est utilisée dans une classe dérivée, on parle de remplacement de fonction. Il s'agit d'un exemple de polymorphisme d'exécution ou de liaison tardive, ce qui signifie que la fonction remplacée sera exécutée au moment de l'exécution.

Pour plus d'informations, reportez-vous à Remplacement de fonction en C++

18. Quels sont les différents concepts de POO en C++ ?

  • Des classes : Il s'agit d'un type de données défini par l'utilisateur
  • Objets : C'est une instance d'une classe
  • Abstraction: C'est une technique consistant à afficher uniquement les détails nécessaires
  • Encapsulation : Encapsulation des données dans une seule unité
  • Héritage: La capacité d'une classe à dériver des propriétés et des caractéristiques d'une autre classe
  • Polymorphisme: Le polymorphisme est connu comme plusieurs formes d'une même chose.

Pour plus d'informations, reportez-vous à Divers concepts de POO en C++

19. Expliquer l'héritage

La capacité ou l'aptitude d'une classe à dériver des propriétés et des caractéristiques d'une autre classe est appelée héritage. En termes simples, il s'agit d'un système ou d'une technique permettant de réutiliser et d'étendre des classes existantes sans les modifier.

Pour plus d'informations, reportez-vous à Héritage

java diviser la chaîne par délimiteur

20. Quand devrions-nous utiliser l’héritage multiple ?

Les héritages multiples signifient qu’une classe dérivée peut hériter de deux ou plusieurs classes de base/parentes. Ceci est utile lorsqu'une classe dérivée doit combiner de nombreux attributs/contrats et hériter de tout ou partie de l'implémentation de ces attributs/contrats. Pour prendre un exemple concret, considérons vos parents où le parent A est votre papa, le parent B est votre maman et l'enfant C est vous.

héritages multiples

Héritages multiples

Pour plus d'informations, reportez-vous à Héritage Multiple .

21. Qu'est-ce que l'héritage virtuel ?

L'héritage virtuel est une technique qui garantit qu'une seule copie des variables membres d'une classe de base est héritée par les classes dérivées des petits-enfants. En termes simples, l'héritage virtuel est utilisé lorsque nous avons affaire à une situation d'héritages multiples mais que nous souhaitons empêcher plusieurs instances de la même classe d'apparaître dans la hiérarchie d'héritage.

22. Qu'est-ce que le polymorphisme en C++ ?

Le polymorphisme est connu comme plusieurs formes d’une même chose. En termes simples, on peut dire que le polymorphisme est la capacité d'afficher une fonction membre sous plusieurs formes en fonction du type d'objet qui les appelle.

En d’autres termes, nous pouvons aussi dire qu’un homme peut être l’employé de quelqu’un, le fils de quelqu’un, le père de quelqu’un et le mari de quelqu’un ; c'est ainsi que le polymorphisme peut être projeté dans la vie réelle.

Il existe 2 types de polymorphisme :

  1. Polymorphisme au moment de la compilation
    • Surcharge de fonctions
    • Surcharge de l'opérateur
  2. Polymorphisme au moment de l'exécution
    • Fonction prioritaire
    • Fonction virtuelle

Pour en savoir plus, référez-vous à Polymorphisme

23. Quels sont les différents types de polymorphisme en C++ ?

Il existe 2 types de polymorphisme

Polymorphisme au moment de la compilation ou liaison statique

Ce type de polymorphisme est obtenu pendant le temps de compilation du programme, ce qui le rend un peu plus rapide que le temps d'exécution. De plus, l’héritage n’y participe pas. Il est composé de 2 autres techniques :

Surcharge de fonction : Lorsqu’il existe plusieurs fonctions portant le même nom mais des paramètres différents, on parle alors de surcharge de fonctions.

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


Surcharge de l'opérateur : Il s'agit essentiellement de s'entraîner à donner une signification particulière à la signification existante d'un opérateur ou, en termes simples, à redéfinir la signification prédéfinie.

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

Polymorphisme d'exécution ou liaison tardive

Le polymorphisme d'exécution a lieu lorsque les fonctions sont invoquées pendant l'exécution.

Remplacement de fonction : Le remplacement de fonction se produit lorsqu’une fonction membre de la classe de base est redéfinie dans une classe dérivée avec les mêmes arguments et le même type de retour.

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

Sortir:

Function of derived class>

Pour plus d'informations, reportez-vous à Différents types de polymorphisme

24. Comparez le polymorphisme au moment de la compilation et le polymorphisme au moment de l'exécution

Polymorphisme au moment de la compilation

Polymorphisme d'exécution

On l'appelle également liaison statique et liaison anticipée.Elle est également appelée liaison dynamique et liaison tardive.
C'est rapide car l'exécution est connue tôt au moment de la compilation.Il est lent par rapport au moment de la compilation car l'exécution est connue au moment de l'exécution.
Ceci est obtenu par une surcharge des fonctions et une surcharge des opérateurs.Ceci est réalisé par des fonctions virtuelles et la substitution de fonctions.

Pour plus d'informations, reportez-vous à Polymorphisme au moment de la compilation et polymorphisme au moment de l'exécution

25. Expliquez le constructeur en C++.

Un constructeur est un type spécial de fonction membre d'une classe, dont le nom est le même que celui de la classe par laquelle il est invoqué et initialise la valeur de l'objet d'une classe.

Il existe 3 types de constructeurs :

A. Constructeur par défaut : C'est le type de constructeur le plus basique qui n'accepte aucun argument ni paramètre. Même s'il n'est pas appelé, le compilateur l'appelle automatiquement lorsqu'un objet est créé.

Exemple:

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


B. Constructeur paramétré : C'est un type de constructeur qui accepte des arguments ou des paramètres. Il doit être appelé explicitement en passant des valeurs dans les arguments car ces arguments aident à initialiser un objet lors de sa création. Il porte également le même nom que celui de la classe.

En outre, il est utilisé pour surcharger les constructeurs.

Exemple:

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

Sortir

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

C. Copier le constructeur : Un constructeur de copie est une fonction membre qui initialise un objet en utilisant un autre objet de la même classe. De plus, le constructeur Copy prend une référence à un objet de la même classe comme argument.

Exemple:

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


Pour plus d'informations, reportez-vous à Constructeurs

26. Que sont les destructeurs en C++ ?

Les destructeurs sont membres de fonctions d'une classe qui suppriment un objet lorsqu'un objet de la classe devient hors de portée. Les destructeurs portent le même nom que la classe précédé d'un signe tilde (~). De plus, les destructeurs suivent un de bas en haut approche, contrairement aux constructeurs qui suivent une approche descendante.

jbouton

Syntaxe:

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

Pour plus d'informations, reportez-vous à Destructeur .

27. Qu'est-ce qu'un destructeur virtuel ?

Lors de la destruction d'instances ou d'objets d'une classe dérivée à l'aide d'un objet pointeur de classe de base, un destructeur virtuel est invoqué pour libérer de l'espace mémoire alloué par l'objet ou l'instance de classe dérivée.

Le destructeur virtuel garantit que le destructeur de la classe dérivée est appelé en premier. Ensuite, le destructeur de la classe de base est appelé pour libérer l'espace occupé par les deux destructeurs dans la classe d'héritage, ce qui nous évite la fuite de mémoire. Il est conseillé de rendre votre destructeur virtuel chaque fois que votre classe est polymorphe.

Pour plus d'informations, reportez-vous à Destructeur virtuel

28. La surcharge du destructeur est-elle possible ? Si oui, expliquez et si non, pourquoi ?

La réponse simple est NON nous ne pouvons pas surcharger un destructeur. Il est obligatoire de n'utiliser qu'un destructeur par classe en C++. Il convient également de mentionner que Destructor ne prend pas d'arguments et n'a pas non plus de paramètre qui pourrait aider à surcharger.

Questions d'entretien C++ – Niveau intermédiaire

29. Quelles opérations sont autorisées sur les pointeurs ?

Les pointeurs sont les variables utilisées pour stocker l'emplacement de l'adresse d'une autre variable. Les opérations autorisées sur un pointeur sont :

  1. Incrément/Décrément d'un pointeur
  2. Addition et soustraction d'un entier à un pointeur
  3. Comparaison de pointeurs du même type

30. Quel est le but du supprimer opérateur?

L'opérateur delete permet de supprimer/supprimer toutes les caractéristiques/propriétés d'un objet en désallouant sa mémoire ; de plus, il renvoie finalement vrai ou faux. En termes simples, il détruit ou libère les objets tableau et non-tableau (pointeur) créés par de nouvelles expressions.

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

Pour plus d'informations, reportez-vous à Supprimer l'opérateur

31. En quoi la suppression [] est-elle différente de la suppression ?

supprimer[]

supprimer

Il est utilisé pour supprimer un tableau entierIl est utilisé pour supprimer un seul pointeur
Il est utilisé pour supprimer les objets de nouveau[]; Par là, nous pouvons dire que supprimer[] est utilisé pour supprimer un tableau d'objetsIl est utilisé pour supprimer les objets de nouveau; Par là, nous pouvons dire que supprimer est utilisé pour supprimer un seul objet
Il peut appeler autant de destructeurs qu'il le souhaiteIl ne peut appeler le destructeur d'une classe qu'une seule fois

32. Que savez-vous de la classe d'amis et de la fonction d'ami ?

Une classe amie est une classe qui peut accéder à la fois aux variables protégées et privées des classes où elle est déclarée comme amie.

Exemple de classe d'amis :

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


Une fonction ami est une fonction utilisée pour accéder aux données membres privées, protégées et publiques ou aux fonctions membres d'autres classes. Il est déclaré avec un mot-clé ami. L'avantage d'une fonction amie est qu'elle n'est pas liée à la portée de la classe et qu'une fois déclarée dans une classe, de plus, elle ne peut pas être appelée par un objet de la classe ; il peut donc être appelé par d'autres fonctions. Compte tenu de tous les points mentionnés, nous pouvons dire qu'une fonction ami est une fonction globale .

Exemple de fonction ami :

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


Pour plus d'informations, reportez-vous au fonction ami et classe ami

33. Qu'est-ce qu'une erreur de débordement ?

Une erreur de débordement se produit lorsque le nombre est trop grand pour que le type de données puisse le gérer. En termes simples, il s'agit d'un type d'erreur qui est valable pour le défini mais qui dépasse la plage définie où elle devrait coïncider/se situer.

Par exemple, la plage du type de données int est –2 147 483 648 à 2 147 483 647 et si on déclare une variable de taille 2 247 483 648 cela générera une erreur de débordement.

34. Que fait l'opérateur Scope Résolution ?

Un opérateur de résolution de portée est désigné par un ' :: ' symbole. Tout comme son nom, cet opérateur résout la barrière de portée dans un programme. Un opérateur de résolution de portée est utilisé pour référencer une fonction membre ou une variable globale hors de leur portée et à laquelle il peut également accéder à la variable ou à la fonction masquée dans un programme.

La résolution de portée est utilisée pour de nombreuses tâches :

  1. Pour accéder à une variable globale lorsqu'il existe une variable locale du même nom
  2. Pour définir la fonction en dehors de la classe
  3. En cas de successions multiples
  4. Pour l'espace de noms

Pour plus d'informations, reportez-vous à Opérateur de résolution de portée

générateur de nombres aléatoires Java

35. Quels sont les modificateurs d'accès C++ ?

La restriction d'accès spécifiée aux membres de la classe (qu'il s'agisse d'une fonction membre ou d'un membre de données) est connue sous le nom de modificateurs/spécificateurs d'accès.

Les modificateurs d'accès sont de 3 types :

  1. Privé - Il n'est ni accessible ni visible de l'extérieur de la classe.
  2. Protégé – Il est accessible si et seulement si l'accesseur est la classe dérivée
  3. Publique - Il est accessible ou consultable depuis l'extérieur de la classe.

Pour plus d'informations, reportez-vous à Modificateurs d'accès

36. Pouvez-vous compiler un programme sans la fonction principale ?

Oui, il est tout à fait possible de compiler un programme sans main(). Par exemple, utilisez des macros qui définissent le principal

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

Pour plus d'informations, reportez-vous à Pouvez-vous compiler un programme sans la fonction principale

37. Qu'est-ce que la STL ?

STL est connue sous le nom de Standard Template Library, c'est une bibliothèque qui fournit 4 composants comme un conteneur, des algorithmes et des itérateurs.

C++ STL

Pour plus d'informations, reportez-vous à STL en C++

38. Définir la fonction en ligne. Pouvons-nous avoir une fonction en ligne récursive en C++ ?

Une fonction en ligne est une forme de requête et non une commande adressée à un compilateur qui entraîne l'intégration de notre fonction dans le corps de la fonction principale. Une fonction en ligne peut devenir une surcharge si le temps d'exécution de la fonction est inférieur au temps de commutation de la fonction appelante à la fonction appelée. Pour créer une fonction en ligne, utilisez le mot-clé en ligne before et définissez la fonction avant que des appels ne soient effectués à la fonction.

Fonction en ligne

Explication de la fonction en ligne

Syntaxe:

inline data_type function_name() { Body; }>

La réponse est Non; Cela ne peut pas être récursif.

Une fonction en ligne ne peut pas être récursive car dans le cas d'une fonction en ligne, le code est simplement placé dans la position d'où il est appelé et ne conserve pas une information sur la pile qui est nécessaire à la récursion.

De plus, si vous écrivez un mot-clé en ligne devant une fonction récursive, le compilateur l'ignorera automatiquement car le mot-clé en ligne n'est considéré que comme une suggestion par le compilateur.

Pour plus d'informations, reportez-vous à Fonction en ligne

39. Qu'est-ce qu'une classe abstraite et quand l'utilisez-vous ?

Une classe abstraite est une classe spécialement conçue pour être utilisée comme classe de base. Une classe abstraite contient au moins une fonction virtuelle pure. Vous déclarez une fonction virtuelle pure en utilisant un spécificateur pur (= 0) dans la déclaration d'une fonction membre virtuelle dans la déclaration de classe

Vous ne pouvez pas utiliser une classe abstraite comme type de paramètre, type de retour de fonction ou type de conversion explicite, ni déclarer un objet d'une classe abstraite. Cependant, il peut être utilisé pour déclarer des pointeurs et des références à une classe abstraite.

Une classe abstraite est utilisée si vous souhaitez fournir une fonctionnalité commune implémentée parmi toutes les implémentations du composant. Les classes abstraites vous permettront d'implémenter partiellement votre classe, alors que les interfaces n'auraient aucune implémentation pour aucun membre. En termes simples, les classes abstraites conviennent parfaitement si vous souhaitez fournir des détails d’implémentation à vos enfants mais ne souhaitez pas autoriser l’instanciation directe d’une instance de votre classe.

40. Que sont les données membres statiques et les fonctions membres statiques ?

Les données membres statiques d'une classe sont des données membres normales mais précédées d'un mot clé statique. Il s'exécute avant main() dans un programme et est initialisé à 0 lors de la création du premier objet de la classe. Il n’est visible que par une classe définie mais sa portée s’étend sur toute une vie.

Syntaxe:

  static Data_Type Data_Member;>

La fonction membre statique est la fonction membre utilisée pour accéder à d’autres données membres statiques ou à d’autres fonctions membres statiques. Il est également défini avec un mot-clé static. Nous pouvons accéder à la fonction membre statique en utilisant le nom de la classe ou les objets de classe.

nombre à chaîne java

Syntaxe:

classname::function name(parameter);>

Questions d'entretien C++ – Niveau expert

41. Quelle est l’utilisation principale du mot-clé Volatile ?

Tout comme son nom, les choses peuvent changer soudainement et de manière inattendue ; Il est donc utilisé pour informer le compilateur que la valeur peut changer à tout moment. De plus, le mot-clé volatile empêche le compilateur d'effectuer une optimisation du code. Il était destiné à être utilisé lors de l'interface avec du matériel mappé en mémoire, des gestionnaires de signaux et des instructions de code machine.

Pour plus d'informations, reportez-vous à ceci Volatil

42. Définissez la classe de stockage en C++ et nommez-en quelques-unes

La classe de stockage est utilisée pour définir les fonctionnalités (durée de vie et visibilité) d'une variable ou d'une fonction. Ces fonctionnalités aident généralement à retracer l'existence d'une variable pendant l'exécution d'un programme.

Syntaxe:

storage_class var_data_type var_name;>

Quelques types de classes de stockage :

Exemples de classe de stockage

Pour plus d'informations, reportez-vous à Classe de stockage

43. Qu'est-ce qu'un spécificateur de classe de stockage mutable ? Comment peuvent-ils être utilisés ?

Tout comme son nom, le spécificateur de classe de stockage mutable est utilisé uniquement sur un membre de données de classe pour le rendre modifiable même si le membre fait partie d'un objet déclaré comme const. Les membres statiques, const ou de référence ne peuvent pas utiliser le spécificateur mutable. Lorsque nous déclarons une fonction comme const, ce pointeur passé à la fonction devient const.

44. Définissez la variable de portée du bloc.

La portée d'une variable est donc une région où une variable est accessible. Il existe deux régions de portée : A globale et bloc ou locale.

Une variable de portée de bloc est également appelée variable de portée locale. Une variable définie à l'intérieur d'une fonction (comme main) ou à l'intérieur d'un bloc (comme les boucles et les blocs if) est une variable locale. Il peut être utilisé UNIQUEMENT dans la fonction/le bloc particulier dans lequel il est déclaré. une variable de portée bloc ne sera pas disponible en dehors du bloc même si le bloc est à l'intérieur d'une fonction.

Pour plus d'informations, reportez-vous à Portée d'une variable

45. Quelle est la fonction du mot-clé Auto ?

Le mot-clé auto peut être utilisé pour déclarer simplement une variable de type complexe. Vous pouvez utiliser auto pour déclarer une variable si la phrase d'initialisation contient des modèles, des pointeurs vers des fonctions, des références à des membres, etc. Grâce aux capacités d'inférence de type, nous pouvons passer moins de temps à écrire des choses que le compilateur connaît déjà. Comme tous les types sont déduits uniquement lors de la phase de compilation, le temps de compilation augmente légèrement mais cela n'affecte pas le temps d'exécution du programme.

Pour plus d'informations, reportez-vous à Voitures en C++

46. ​​Définissez l'espace de noms en C++.

Les espaces de noms nous permettent d'organiser des éléments nommés qui auraient autrement une portée globale en portées plus petites, ce qui nous permet de leur donner une portée d'espace de noms. Cela permet d'organiser les parties du programme en étendues logiques distinctes avec des noms. L'espace de noms fournit un emplacement pour définir ou déclarer des identifiants tels que des variables, des méthodes et des classes.

Ou nous pourrions dire qu'un espace de noms est une zone déclarative qui donne une portée aux identifiants (noms de types, fonctions, variables, etc.) qu'il contient. Les espaces de noms sont utilisés pour organiser le code en catégories logiques et pour éviter les conflits de noms, qui peuvent survenir lorsque votre base de code contient de nombreuses bibliothèques.

Pour plus d'informations, reportez-vous à Espace de noms en C++

47. Quand le type de retour void() est-il utilisé ?

Le mot clé void, lorsqu'il est utilisé comme type de retour de fonction, indique que la fonction ne renvoie pas de valeur. Lorsqu'il est utilisé comme liste de paramètres pour une fonction, void indique que la fonction ne prend aucun paramètre. Les fonctions sans retour de valeur sont également appelées fonctions vides. On les appelle nuls car ils ne sont pas conçus pour renvoyer quoi que ce soit. C'est vrai, mais seulement partiellement. Nous ne pouvons pas renvoyer les valeurs des fonctions void, mais nous pouvons certainement renvoyer quelque chose. Bien que les fonctions void n'aient pas de type de retour, elles peuvent renvoyer des valeurs.

Pour plus d'informations, reportez-vous à Type de retour nul .

48. Quelle est la différence entre la copie superficielle et la copie approfondie ?

Copie superficielle

Copie approfondie

En copie superficielle, une copie de l'objet original est stockée et seule l'adresse de référence est finalement copiée. En termes simples, la copie superficielle duplique le moins possibleDans Deep Copy, la copie de l'objet original et les copies répétitives sont toutes deux stockées. En termes simples, la copie profonde duplique tout
Une copie superficielle d'une collection est une copie de la structure de la collection, et non des éléments. Avec une copie superficielle, deux collections partagent désormais des éléments individuels.Une copie complète d'une collection est constituée de deux collections avec tous les éléments de la collection originale dupliqués.
Une copie superficielle est plus rapideLa copie approfondie est comparativement plus lente.

Pour plus d'informations, reportez-vous à Copie superficielle VS copie approfondie

49. Peut-on appeler une fonction virtuelle depuis un constructeur ?

Oui, on peut appeler une fonction virtuelle depuis un constructeur. Mais cela peut lever une exception de substitution.

50. Que sont les pointeurs vides ?

Tout comme son nom, un pointeur vide est un pointeur qui n’est associé à rien ni à aucun type de données. Néanmoins, un pointeur vide peut contenir la valeur d'adresse de n'importe quel type et peut être converti d'un type de données à un autre.

Pour en savoir plus, les informations se réfèrent à Pointeur vide en C++

Question bonus:

Qu'est-ce que ' ce ‘ pointeur en C++ ?

ce pointer permet à chaque objet d'avoir accès à sa propre adresse via un pointeur essentiel. Toutes les fonctions membres prennent ce pointeur comme argument implicite. ce aiguille peut être utilisé pour faire référence à l’objet appelant dans une fonction membre.

  • ce le pointeur est utilisé pour passer un objet en paramètre à une autre méthode.
  • Chaque objet obtient sa propre copie du membre de données.
  • ce le pointeur est utilisé pour déclarer les indexeurs.

Pour plus d'informations, reportez-vous à ce pointeur en C++