Pourquoi l'instruction delete[] tab; ne fonctionne-t-elle pas avec des tableaux de pointeurs ?
Click to see answer
Cette instruction ne fonctionne pas ici car elle était valide uniquement lorsqu'on avait l'adresse du premier octet vers un tableau dynamique.
Click to see question
Pourquoi l'instruction delete[] tab; ne fonctionne-t-elle pas avec des tableaux de pointeurs ?
Cette instruction ne fonctionne pas ici car elle était valide uniquement lorsqu'on avait l'adresse du premier octet vers un tableau dynamique.
Qu'est-ce que le Tri-Fusion ?
C'est un algorithme récursif qui implique des opérations de scindage, de tri et de fusion.
Quelles sont les principales zones de mémoire dans l'architecture de la mémoire?
Les principales zones de mémoire sont la Pile (Stack) pour les variables locales, le Tas (Heap) pour l'allocation dynamique, le Code (code segment) pour le code compilé, et les Données (Data segment) pour les variables globales et statiques.
Que se passe-t-il lorsque l'on démarre un programme?
Lorsque l'on démarre un programme, le système d'exploitation alloue un espace mémoire pour notre programme.
Comment se décompose la zone allouée aux données?
La zone allouée aux données se décompose en plusieurs zones.
Comment allouer de la mémoire pour un tableau de pointeurs en C++ ?
On peut utiliser 'int * tab[10];' suivi de 'tab[i] = new int;' pour chaque élément.
Comment assigner une valeur à un élément d'un tableau de pointeurs en C++ ?
Utilisez '*tab[i] = valeur;' après avoir alloué de la mémoire avec 'new'.
Quelle est la méthode pour libérer la mémoire allouée pour un tableau de pointeurs en C++ ?
Utilisez 'delete tab[j];' pour chaque élément après utilisation.
Quel est l'objectif d'un diagramme de classe dans la composition de classes?
Illustrer le comportement désiré et fournir des indices précieux sur le design à effectuer.
Si notre ensemble est trié, on peut mettre en place la recherche ____________ ?
dichotomique
Pourquoi est-il important de faire attention à l'étoile lors de l'utilisation de tableaux de pointeurs ?
L'étoile est utilisée pour accéder à la valeur pointée par le pointeur, ce qui est crucial pour éviter des erreurs.
Quelle est la complexité de la fusion de deux ensembles dans le tri-fusion?
La complexité de la fusion de deux ensembles est O(n), ce qui signifie qu'elle s'effectue en n opérations.
Quel opérateur est utilisé pour affecter une valeur à un pointeur en C++?
L'opérateur « * » est utilisé pour affecter une valeur du type qui a été déclaré.
Quelles sont les opérations élémentaires à surveiller dans la complexité de temps ?
Comparaison, Affectation, Opérations arithmétiques.
Que représente la déclaration 'int * a = new int[10];'?
Ceci représente un tableau dynamique de 10 entiers, où 'a' est un pointeur vers le premier octet de la structure d'entiers.
Quels sont les deux cas de composition de classes présentés ?
Dans quel contexte la complexité de temps est-elle particulièrement étudiée ?
Dans un contexte où la mémoire n’est pas vraiment un obstacle.
Quels sont les deux grands types d'algorithme de recherche ?
Recherche linéaire et recherche dichotomique.
Comment accéder aux méthodes d'une instance de classe déclarée sur la stack ?
On utilise l'opérateur d'accès « . » pour accéder aux méthodes ou propriétés, par exemple : e.attaquer();
Comment la complexité algorithmique est-elle influencée par le contexte d'exécution ?
La complexité est relative au contexte ; par exemple, sur une plateforme avec peu de mémoire, les algorithmes seront plus complexes que sur une plateforme avec plus de ressources.
Qu'est-ce que le tri-fusion ?
Le tri-fusion est un algorithme de tri qui divise les données en sous-ensembles, les trie individuellement, puis les fusionne pour obtenir un ensemble trié.
Quelle est la complexité de l'algorithme de tri-fusion ?
O(n*log 2 (n))
Quelle condition doit-on respecter avant de procéder à une recherche dichotomique ?
Les données doivent être triées.
Que fait l'instruction 'new' en C++ ?
Chaque instruction 'new' crée une nouvelle instance de la classe Ennemi.
Quelle est une solution pour gérer la complexité algorithmique sur des plateformes à faible mémoire ?
Utiliser un algorithme moins gourmand en espace mémoire mais plus complexe en temps.
Que fait l'instruction 'int * p = new int;' en C++?
Elle alloue un bloc mémoire pouvant contenir un entier et la variable p reçoit l'adresse du premier octet de ce bloc.
Que désigne le terme 'complexité algorithmique'?
Il désigne l'efficacité d'un algorithme et non la complexité de son implémentation.
Comment déclarer un tableau dynamique en C++ ?
int * tab = new int[10];
Comment libérer la mémoire d'une instance créée avec 'new' en C++ ?
On utilise l'instruction 'delete' suivie du pointeur, par exemple: delete ptrEnnemi.
Que contient le bloc mémoire après l'allocation avec 'new int'?
Le bloc contient une donnée invalide, souvent appelée 'junk'.
Qu'est-ce que l'allocation dynamique en C++?
L'allocation dynamique en C++ permet de réserver de la mémoire pendant l'exécution d'un programme, plutôt qu'à la compilation.
Qu'est-ce que la composition faible dans la composition de classes ?
Une classe garde la référence d’une autre classe dans une de ses variables, et on ne touche pas à cette référence, laissant la stack faire son travail.
Que stocke le tableau tabEnnemis dans la classe Ennemi ?
Des adresses vers des instances de la classe Ennemi.
Que fait la déclaration 'int * tab = new int[10];' ?
Elle alloue dynamiquement 10 blocs consécutifs pour des entiers en mémoire et la variable tab reçoit l’adresse du premier bloc.
Que fait une classe lorsqu'elle garde la référence d'une autre classe dans une de ses variables ?
Habituellement, on ne touche pas à cette référence, on laisse la stack faire son travail !
La complexité d'un algorithme est-elle toujours liée à sa difficulté de code ?
Non, un algorithme peut être 'compliqué' comme un algorithme récursif, mais avoir une faible complexité.
Quel est le lien entre complexité et efficacité d'un algorithme?
Plus un algorithme est complexe, moins il est efficace.
Quelles sont les deux catégories principales des algorithmes de tri ?
Les algorithmes de tri sont classés en deux catégories : les lents et les rapides.
Comment les adresses mémoire sont-elles utilisées en programmation?
Les adresses mémoire sont utilisées pour accéder aux emplacements de mémoire où les données sont stockées, permettant ainsi la manipulation de ces données.
Qu'est-ce que la composition forte dans la composition de classes ?
Une classe alloue dynamiquement une autre classe et stocke l’adresse reçue dans une variable, et la classe qui alloue la mémoire s’occupe de la libérer.
Quels sont les principaux types d'algorithmes de tri ?
Les principaux types d'algorithmes de tri incluent le tri à bulles, le tri par insertion, le tri par sélection, le tri fusion et le tri rapide.
Comment appelle-t-on la méthode attaquer sur le premier élément du tableau tabEnnemis ?
tabEnnemis[0] -> attaquer();
Que se passe-t-il lorsqu'une classe alloue dynamiquement une autre classe ?
Habituellement, la classe qui alloue la mémoire s'occupe de la libérer.
Quels sont les critères de performance importants pour les algorithmes de tri ?
Le nombre de comparaisons effectuées est un critère de performance très important.
Quels éléments influencent la complexité d'un algorithme ?
La complexité se joue au niveau des comparaisons, des affectations et de l'arithmétique.
Quels sont quelques exemples d'algorithmes de tri lents ?
Tri par sélection, tri par insertion, tri à bulles, etc.
Comment scinder un tableau de N éléments en 2 lors du tri-fusion ?
Chercher la valeur telle que : 2 x = N, en doublant nos unités jusqu’à l’obtention du nombre N.
Qu'est-ce qu'un algorithme de recherche ?
Un algorithme de recherche est une méthode utilisée pour trouver un élément spécifique dans une structure de données, comme une liste ou un tableau.
Qu'est-ce qu'un algorithme de recherche classique ?
C'est un algorithme utilisé pour vérifier l’existence d’un élément, la position d’un élément, ou le nombre d’éléments selon un critère dans un tableau, liste, fichier, etc.
Quel type de données est utilisé dans le tableau tabEnnemis ?
Des pointeurs vers des instances de la classe Ennemi.
Quel type d'algorithmes est mentionné dans le texte ?
Algorithmes de tri.
Quelle est la complexité quadratique et donnez un exemple ?
O(n^2), exemple : Tri par sélection.
Quels sont quelques exemples d'algorithmes de tri rapides ?
Tri fusion, tri rapide, etc.
Quelle est la complexité de la méthode pour scinder un tableau dans le tri-fusion ?
La complexité est O(log 2 (n)).
Quel est l'algorithme considéré comme le pire pour le tri par sélection ?
Le tri par sélection est considéré comme le pire algorithme car il compare systématiquement toutes les entrées restantes à chaque tour.
Que représente &a dans le code 'int a = 5;' ?
&a est la référence (l’adresse) du premier octet de la structure (ici, un entier).
Comment allouer un tableau en C++?
On utilise l'opérateur [] avec la syntaxe : int* pData = new int[10];
Comment allouer un tableau dynamique en C++ ?
On utilise la syntaxe : int * tab = new int[10];
Quelle est la syntaxe pour allouer dynamiquement une instance de la classe Ennemi ?
Ennemi * prtEnnemi = new Ennemi();
Comment se déroule la recherche dans un tableau non trié ?
La recherche s’effectue linéairement si les éléments ne sont pas triés.
Où peut-on observer le nombre de comparaisons effectuées lors d'un algorithme de tri ?
Il apparaît en haut à gauche dans la vidéo mentionnée.
Qu'est-ce que l'algorithme de recherche dichotomique?
C'est un algorithme qui divise un ensemble en deux jusqu'à isoler la valeur cherchée.
Quelle est la complexité linéaire ?
O(n), exemple : Tri par sélection.
Comment calcule-t-on la complexité algorithmique du tri par sélection ?
On s'attarde au pire cas que l'algorithme peut rencontrer.
Quelle est la caractéristique de la mémoire allouée pour un tableau?
La mémoire est consécutive en mémoire comme un tableau standard.
Quel type de variable est 'p' dans 'int * p;' ?
p est une variable de type adresse pouvant recueillir la référence (adresse) d’un entier stocké en mémoire.
Que se passe-t-il si le constructeur de la classe Ennemi a des paramètres ?
Il faudra mettre les parenthèses lors de l'allocation dynamique.
Comment désallouer un tableau dynamique en C++ ?
On utilise la syntaxe : delete [] tab;
Comment déclarer un tableau statique de pointeurs vers des instances d'une classe en C++ ?
Ennemi * tabEnnemis[10];
Quelle est la complexité de l'opération de scindage dans la recherche dichotomique?
La complexité de l'opération de scindage est O(log 2 n).
Quelle est la complexité linéarithmique et donnez un exemple ?
O(n*log(n)), exemple : Tri fusion.
Quelles sont les deux sortes de complexités algorithmiques?
Que représente l'instruction 'int * tab[10];'?
C'est un tableau statique de 10 pointeurs vers des entiers.
Quelle est la taille du tableau statique de pointeurs dans l'exemple donné ?
10 éléments.
Qu'est-ce qu'un destructeur dans une classe en C++?
Le destructeur est une méthode spéciale préfixée du symbole « ~ » qui est appelée avant la suppression définitive de l'instance en mémoire.
Comment déclarer un tableau dynamique en C++ ?
int * tab = new int[10];
Quelles sont les deux possibilités pour utiliser des tableaux de pointeurs en C++?
Quel est le symbole représentant une association dans un diagramme de classes?
--- - ----- >
Que reçoit pData lors de l'allocation d'un tableau?
pData reçoit l'adresse du premier élément du tableau.
Quel est le rôle du destructeur dans l'exemple donné ?
Le destructeur de la classe Ennemi est appelé lorsque l'objet est supprimé avec 'delete ptrEnnemi'.
Quel opérateur est utilisé pour accéder aux membres d'un objet en allocation dynamique en C++?
L'opérateur d'accès est « -> ».
Que fait l'instruction 'p = &a;' ?
L'instruction 'p = &a;' assigne à p l'adresse de la variable a.
Que représente la variable ptrEnnemi après l'allocation dynamique ?
Elle reçoit l'adresse du premier bloc de la structure de la classe Ennemi.
Quelle est la complexité logarithmique ?
O(log(n)).
Quelle est la formule de la complexité du tri par sélection ?
La formule est n(n-1)/2, ce qui indique une complexité quadratique.
Pourquoi ne faut-il pas utiliser une boucle pour désallouer un tableau dynamique en C++ ?
Utiliser une boucle détruit la structure puisque la désallocation doit être consécutive.
Que se passe-t-il lorsque l'on utilise 'delete pData'?
Le pointeur peut être réutilisé pour un autre emplacement mémoire, mais le contenu pointé devient indéterminé.
Que fait l'instruction 'Ennemi * tabEnnemis = new Ennemi[10];' ?
Elle prépare 10 instances de la classe Ennemi en mémoire.
Que mesure la complexité de temps d'un algorithme?
Le nombre d’opérations élémentaires effectuées par un algorithme.
Quelles règles doivent être suivies lors de l'utilisation d'un tableau de pointeurs vers des instances de classe ?
Il faut suivre les règles pour le stockage et la suppression.
Quand le destructeur d'une classe est-il appelé?
Le destructeur est appelé à la sortie d'une méthode lorsque la mémoire de la variable locale est libérée.
Quelle est la différence entre 'int tab[10];' et 'int * tab[10];'?
'int tab[10];' est un tableau statique de 10 entiers, tandis que 'int * tab[10];' est un tableau statique de 10 pointeurs vers des entiers.
Que se passe-t-il si on essaie de faire un delete sur tab[0] dans un tableau de pointeurs?
L'exécution va planter car tab[0] ne réfère pas à une allocation dynamique.
Comment remplir un tableau dynamique en C++ ?
Utiliser une boucle for pour assigner des valeurs, par exemple : for(int i = 0; i < 10; i++) { tab[i] = i + 10; }
Qu'est-ce qu'une agrégation dans un diagramme de classes?
La classe « A » possède un pointeur sur un objet de la classe « B » parmi ses attributs mais n’est pas responsable de la destruction de celui-ci.
Que se passe-t-il lorsque 'delete ptrEnnemi' est exécuté ?
L'objet Ennemi est détruit et le destructeur de la classe Ennemi est appelé.
Comment créer un objet de la classe Ennemi en utilisant l'allocation dynamique?
En utilisant la syntaxe : Ennemi * ptrEnnemi = new Ennemi();
Quel est le risque associé à la fonction 'doIt' dans le code donné?
La mémoire allouée par 'new int' n'est pas libérée, ce qui cause une fuite de mémoire.
Quel est le degré du polynôme associé à la complexité du tri par sélection ?
Le degré du polynôme est 2.
Combien de comparaisons sont effectuées lors du premier tour du tri par sélection?
9 comparaisons
Pourquoi est-il recommandé d'effectuer un tri préalable avant d'appliquer un algorithme de recherche?
Un tri préalable permet de gagner en performance sur l'algorithme de recherche.
Que mesure la complexité d’espace d'un algorithme?
Le nombre d’espace physique (essentiellement de la mémoire) occupé par l’algorithme.
Pourquoi est-il important de créer les instances avant d'accéder à leurs méthodes ?
Pour savoir combien d'octets allouer en mémoire.
Quel est l'effet de la sortie d'une méthode sur les variables locales en C++?
À la sortie de la méthode, la stack est libérée des variables locales, et le destructeur de la classe correspondante est appelé.
Qu'est-ce qui se passe avec un pointeur local après un 'delete'?
Le pointeur est dépilé de la 'stack' lors de sa fin de vie, aucune trace ne reste en mémoire.
Quelle valeur a tab[0] après le remplissage du tableau ?
tab[0] vaut 10.
Où sont stockées les données lorsque l'on utilise un tableau de pointeurs sans allocation dynamique?
Tout est sur la stack.
Comment stocker des pointeurs vers des entiers alloués dynamiquement en C++?
On peut utiliser un tableau de pointeurs, par exemple : int * tab[10]; puis allouer dynamiquement avec tab[0] = new int; et assigner une valeur avec *tab[0] = 12.
Quelle est la différence entre agrégation et composition?
Dans l'agrégation, la classe « A » ne détruit pas l'objet de la classe « B », tandis que dans la composition, la classe « A » est responsable de la destruction de l'objet de la classe « B ».
Quels sont les deux modes de passage en paramètre en programmation ?
Par valeur et par référence.
Quelle est l'équivalence de ptrEnnemi -> attaquer();?
C'est équivalent à *(ptrEnnemi).attaquer();
Quel type de mémoire est utilisé pour 'ptrEnnemi' dans cet exemple ?
La mémoire utilisée pour 'ptrEnnemi' est la heap, car l'objet est créé avec 'new'.
Quel est le rôle du fichier .h en C++ ?
Le fichier .h contient la déclaration de la classe, incluant le nom de la classe, les modificateurs de visibilité, et les déclarations des attributs et des méthodes, sans les définitions.
Quelle est la règle du pouce concernant l'allocation de mémoire?
Une fonction ou une méthode qui alloue de la mémoire est généralement responsable de la libérer.
Comment allouer dynamiquement un tableau d'instances d'une classe en C++ ?
En utilisant la syntaxe : Ennemi * tabEnnemis = new Ennemi[10]; pour allouer 10 blocs consécutifs en mémoire.
Comment dénote-t-on la complexité d'un algorithme ?
Avec le symbole 'O'.
Comment peut-on exprimer la complexité du tri par sélection ?
On peut l'exprimer comme n².
Qu'est-ce que la recherche linéaire?
La recherche linéaire consiste à parcourir le tableau au complet, c'est un algorithme glouton.
Quel est le total de comparaisons effectuées lors des 9 tours du tri par sélection?
45 comparaisons
Que signifie 'tabEnnemis[0].attaquer();' dans le contexte des tableaux de pointeurs ?
Cela appelle la méthode attaquer() sur la première instance de la classe Ennemi dans le tableau.
Où sont stockées les variables locales?
Les variables locales sont stockées dans la 'stack'.
Comment accède-t-on à un élément d'un tableau en C++?
On utilise l'opérateur []. Par exemple, std::cout << pData[4]; est équivalent à std::cout << *(pData + 4);
Quelle valeur a tab[9] après le remplissage du tableau ?
tab[9] vaut 19.
Pourquoi est-il important de supprimer les adresses stockées dans un tableau de pointeurs?
Il est crucial de supprimer les adresses pour éviter les fuites de mémoire, car chaque pointeur dans le tableau pointe vers un bloc de mémoire alloué dynamiquement.
Comment dénote-t-on la complexité d'un algorithme ?
Avec le symbole 'O'.
Que fait l'instruction 'int * p = new int;' en C++?
Elle alloue dynamiquement de la mémoire pour un entier et assigne l'adresse à un pointeur 'p'.
Quand un objet de la classe « B » est-il généralement instancié dans le cas d'une composition?
L'objet de la classe « B » est généralement instancié à l’intérieur de la classe « A », souvent lors de la construction.
Que se passe-t-il si ptrEnnemi est null ou invalide?
L'exécution va s'arrêter avec une erreur de mémoire.
Quelle est la complexité d'un algorithme de tri par sélection ?
O(n^2), ce qui correspond à une complexité quadratique.
Que se passe-t-il lors d'un passage par valeur ?
On obtient deux emplacements mémoire distincts contenant les mêmes valeurs.
Que reçoit la variable tabEnnemis lors de l'allocation dynamique d'un tableau d'instances d'une classe ?
La variable tabEnnemis reçoit l'adresse du premier bloc alloué en mémoire.
Que contient le fichier .cpp en C++ ?
Le fichier .cpp contient la définition de la classe, incluant les définitions des attributs statiques et le corps des méthodes.
Que se passe-t-il si l'on met un pointeur à nullptr?
Mettre le pointeur à nullptr ne libère pas la mémoire et peut provoquer une fuite de mémoire.
Quelle est la complexité dans le pire cas de la recherche linéaire?
La complexité dans le pire cas est de O(n), ce qui signifie qu'il faut n comparaisons.
Quelle est une distinction importante à garder à l'esprit concernant 'tabEnnemis' ?
Il ne s'agit pas de pointeurs, mais d'un tableau d'instances de la classe Ennemi.
Où sont stockées les variables statiques et globales?
Les variables statiques et globales sont stockées dans la 'data'.
Quelle est la formule générale pour le nombre de comparaisons dans le tri par sélection?
n(n-1)/2 comparaisons
Pourquoi est-il important de désallouer la mémoire en C++?
Pour éviter les fuites de mémoire en libérant la mémoire qui a été allouée dynamiquement.
Quelle est la complexité d'un algorithme de tri par sélection ?
O(n²), ce qui indique une complexité quadratique.
Comment obtient-on l'adresse d'une variable en C++ ?
En utilisant l'opérateur &.
Pourquoi les tableaux sont-ils indexés à partir de 0 en C++?
C'est parce que l'indice correspond au décalage par rapport à l'adresse du tableau.
Quelle est la complexité linéaire d'un algorithme ?
O(n).
Quelles règles doivent être suivies lors de l'utilisation de tableaux dynamiques en C++ ?
Il faut suivre les règles pour le stockage et la suppression des blocs alloués.
Pourquoi C++ nécessite-t-il deux fichiers pour une classe ?
Contrairement à C# et Java, C++ nécessite deux fichiers pour séparer les déclarations (dans le fichier .h) des définitions (dans le fichier .cpp).
Où se trouve le code compilé?
Le code compilé se trouve dans la section 'code'.
Pour un tableau de 10 éléments, combien de comparaisons sont nécessaires dans le tri par sélection?
45 comparaisons
Que signifie 'delete p;' dans le contexte de la gestion de la mémoire?
Cela libère la mémoire qui a été allouée dynamiquement pour l'entier pointé par 'p'.
Quelle est la taille en octets réservée pour un int lors de la déclaration 'int a = 52;'?
4 octets
Quelle est la complexité d'une recherche linéaire ?
O(n), ce qui indique une complexité linéaire.
Que fait l'opérateur * en C++ ?
Il permet d'accéder à la valeur à une adresse mémoire.
Comment libérer un tableau en C++?
On doit utiliser l'opérateur delete avec []. Par exemple, delete[] pData; et non delete pData;
Quelle est la complexité linéarithmique d'un algorithme ?
O(n*log(n)).
Quel est l'effet de 'p = null;' après avoir utilisé 'delete p;'?
Cela rend le pointeur 'p' nul, ce qui peut aider à éviter des accès à une mémoire déjà libérée.
À quelle adresse mémoire la variable 'a' est-elle déclarée dans l'exemple donné?
0x00effc08
Quelle est la complexité d'un algorithme de tri fusion ?
O(n*log(n)), ce qui indique une complexité linéarithmique.
Quelle est la valeur de 'valeurDeA' si 'a' est initialisé à 52 et que 'ptrA' pointe vers 'a' ?
valeurDeA aura la même valeur que 'a', soit 52.
Que se passe-t-il si on utilise delete pData au lieu de delete[] pData?
Cela ne libérera que le premier élément du tableau et créera une fuite de mémoire.
Quelle est la complexité logarithmique d'un algorithme ?
O(log(n)).
Comment dénote-t-on la complexité d'un algorithme ?
Avec le symbole 'O'.
Quelles zones mémoire sont allouées pour les variables dans le programme donné ?
Les zones mémoire allouées sont : Pile pour les variables locales comme nombre2 et nombre3, Tas pour l'objet e1 créé avec 'new Ennemi', et Code pour le code de la fonction UneFonction et main().
Comment peut-on visualiser le contenu de la mémoire d'une variable en C++?
En transtyant l'adresse de la variable en pointeur de caractères (unsigned char*)
Qu'est-ce qu'un tableau de pointeurs ?
Un tableau de pointeurs est une structure de données qui contient des adresses de mémoire pointant vers d'autres variables ou objets.
Quelle est la complexité logarithmique ?
O(log(n)).
Quelle est la complexité quadratique et donnez un exemple.
O(n^2), exemple : Tri par sélection.
Comment fonctionne l'allocation dynamique d'une classe en C++ ?
L'allocation dynamique d'une classe en C++ se fait généralement à l'aide de l'opérateur 'new', qui réserve de la mémoire pour un objet de la classe à l'exécution.
Quelle commande permet de voir la valeur de l'octet à l'adresse mémoire de 'a'?
*((unsigned char *)&a)
Quel type de variable est 'e1' dans le programme ?
'e1' est un pointeur vers un objet de la classe Ennemi, alloué dynamiquement dans le Tas.
Qu'est-ce qu'un pointeur en C++?
Un pointeur est une adresse qui stocke l'emplacement d'une variable en mémoire.
Quelle est la complexité linéaire et donnez un exemple.
O(n), exemple : Recherche linéaire.
Quel est le rôle d'un destructeur dans une classe ?
Le destructeur d'une classe est une méthode spéciale qui est appelée lorsque l'objet est détruit, permettant de libérer les ressources allouées dynamiquement.
Quelle est la valeur du premier octet qui suit l'adresse mémoire de 'a'?
0
Quelle est la portée de la variable 'nombre3' dans le programme ?
La variable 'nombre3' a une portée locale à la fonction UneFonction.
Quelle est la taille d'un pointeur en configuration x86?
En configuration x86, un pointeur est stocké sur 32 bits.
Quelle est la complexité linéarithmique et donnez un exemple.
O(n*log(n)), exemple : Tri fusion.
Qu'est-ce que la composition dans un diagramme de classes ?
La composition dans un diagramme de classes représente une relation forte entre deux classes, où une classe (le tout) contient des instances d'une autre classe (les parties).
Que représente '&a' dans le contexte de la gestion de la mémoire?
L'emplacement mémoire de 'a', également appelé un pointeur vers 'a'.
Où est stockée la variable 'nombre1' dans le programme ?
La variable 'nombre1' est stockée dans la zone de données, car elle est déclarée globalement.
Que se passe-t-il lorsque l'on exécute 'int* pValeur = ptrA + 1;'?
La valeur de pValeur sera celle de ptrA augmentée de 4 octets, car un int occupe 4 octets en mémoire.
Quelle est la complexité logarithmique et donnez un exemple.
O(log(n)), exemple : Recherche dichotomique.
Quels types d'exercices peut-on faire pour pratiquer l'allocation dynamique en C++ ?
On peut réaliser des exercices tels que la création de tableaux dynamiques, la gestion de classes avec des pointeurs, et l'implémentation de destructeurs pour éviter les fuites de mémoire.
Quel est le rôle de 'static int cptInstance' dans la classe Ennemi ?
'cptInstance' est une variable statique qui est partagée entre toutes les instances de la classe Ennemi et est stockée dans la zone de données.
Comment allouer de la mémoire dynamique pour un int en C++?
On utilise l'opérateur new : 'int* pData = new int;'.
Comment accéder au contenu d'un pointeur en C++?
On utilise l'opérateur * : par exemple, 'std::cout << *pData;' ou '*pData = 80;'.
Que doit-on faire après avoir utilisé 'new' pour allouer de la mémoire?
Il faut libérer la mémoire allouée avec l'opérateur delete lorsqu'elle n'est plus nécessaire.
Que se passe-t-il si l'on lit le contenu d'un emplacement mémoire avant d'y affecter une valeur?
Le contenu est indéterminé.
Qu'est-ce que l'encapsulation en programmation orientée objet?
C'est le fait de masquer les détails d'implémentation d'un concept (d'une classe).
Quelle est la définition d'une classe?
Une classe est une structure regroupant les données (attributs ou membres) et les opérations (méthodes) pour un concept donné.
Qu'est-ce qu'un attribut dans une classe?
Un attribut, aussi appelé membre ou propriété d’une classe, contient un élément d’information d’une classe (dans une variable).
Comment définit-on une méthode dans une classe?
Une méthode est une opération d’une classe, contenant du code, et on évite les termes fonctions et procédures.
Qu'est-ce qu'un objet en programmation orientée objet?
Un objet est une 'instance' d’une classe, représentant un élément tangible, par exemple, Fido est un objet de la classe Chien.
Quelles sont les trois visibilités possibles pour les attributs et méthodes?
Les trois visibilités sont : public, protected et private.
Que signifie la visibilité 'public'?
Les membres sont accessibles à l’extérieur et à l’intérieur de la classe.
Que signifie la visibilité 'protected'?
Les membres sont accessibles dans les classes dérivées et à l’intérieur de la classe.
Que signifie la visibilité 'private'?
Les membres sont accessibles uniquement à l’intérieur de la classe.
Quelle est la pratique recommandée concernant les méthodes get/set?
Il est recommandé de coder les get/set pour tous les attributs et de rendre private les setters qui ne sont pas nécessaires à l’extérieur de la classe.