Thomas L.

Thomas L.

Pas Encore D'avis

Présentation

Plus disponible pour donner des cours

Je ne suis plus disponible pour donner des cours.

i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i i

Cursus académique

  • diplômé de Université de Nantes
  • Bac S

Questions et Réponses

Mon programme C++ compile parfaitement avec gcc 2.x, et marque pleins d'erreurs avec gcc 3.x

C++ / Problèmes avec les compilateurs en C++

Ça veut probablement dire que tu fais quelque chose de pas standard, que gcc 2 “accepte” mais sur lequel gcc 3 est plus strict. Les erreurs devraient te permettre de trouver quoi et y remédier.

Pourquoi l'idiome de construction à la première utilisation utilise-t-il un pointeur statique plutôt qu'un objet statique ?

C++ / Les classes en C++

Parce qu'un objet est obligé d'être construit dès qu'il existe, alors qu'un pointeur peut valoir null au début et recevoir un objet plus tard (à la première utilisation justement).

Comment surcharger les opérateurs ++ et -- ?

C++ / Les classes en C++

Tu peux définir des méthodes operator--() et operator++() dans ta classe, mais du coup ils doivent ne prendre aucun argument.

Qu'est-ce que le masquage de fonction (name hiding) ?

C++ / Les classes en C++

C'est le nom pour le fait que quand une classe a une méthode non-virtuelle avec un certain nom, ça empêche l'accès aux méthodes du même nom de la classe parente (peu importe leur type) à moins de faire du polymorphisme.

La surcharge d'opérateur n'embellit pas vraiment ma classe ; ce n'est pas censé rendre le code plus lisible ?

C++ / Les classes en C++

C'est vrai. En général, il est recommandé de ne s'en servir que quand c'est vraiment pertinent; genre de surcharger + que si la classe représente quelque chose de fondamentalement numérique. Aussi, si ta classe est beaucoup utilisée, la clareté du code qui l'utilise peu importer plus que la clareté du code de la classe elle-même.

Quelques exemples de surcharge d'opérateur

C++ / Les classes en C++

Le plus souvent, on s'en sert pour == et !=, parce que c'est utile de pouvoir rapidement savoir si deux objets sont identiques. Sinon, si tu as une classe qui représente un vecteur à deux dimensions, tu peux surcharger dessus les opérateurs + et - pour les additionner et soustraire à un autre vecteur, ou * et / pour les multiplier ou diviser par un nombre.

Que faire en cas d'échec du constructeur ?

C++ / Les classes en C++

Soit désallouer tout les membres qui ont été manuellement alloués (dans l'ordre inverse de leur allocation), et uniquement ceux-ci puis lancer une exception, soit faire que l'objet soit marqué quelque part comme invalide et qu'il se désalloue proprement quand il est détruit; mais je recommande le premier.

Quel est l'avantage de surcharger un opérateur ?

C++ / Les classes en C++

Quand c'est proprement utilisé, ça facilite l'utilisation sur des objets d'opérateurs dont on connaît bien le sens, comme == ou +.

Qu'est-ce qu'une classe abstraite ?

C++ / Les classes en C++

C'est une classe dont on ne peut créer aucun objet; on s'en sert pour en hériter dans des classes non-abstraites ("concrètes"). En C++, une classe est abstraite quand elle a au moins une méthode virtuelle sans implémentation.

Comment dériver une classe à partir d'une autre ?

C++ / Les classes en C++

Après le nom de la classe qui hérite, on met ":" suivi du nom de la classe parente. Aussi, après le ":", il est utile d'indiquer "private", "public" ou "protected" pour indiquer la visibilité des méthodes de la classe parente dans la classe qui hérite; généralement, on veut "public".

Peut-on détruire explicitement un objet alloué par new ?

C++ / Les classes en C++

C'est pas juste que l'on peut; à moins d'utiliser quelque chose qui le fait pour nous, quand on a fini de l'utiliser, on doit. Ça se fait avec delete, genre "delete object;".

Comment surcharger correctement l'opérateur < ?

C++ / Les classes en C++

Coté algorithmie, il faut généralement être sûr que l'on produit un vrai ordre — il ne faut faire de cycle. Coté code, il faut généralement que ce soit une méthode const qui prenne en paramètre une référence const vers un objet du même type.

Que signifie la déclaration suivante : « static const int MAX = 10 » ?

C++ / Les classes en C++

On a posé une constante qui ne peut pas changer de valeur, et qui est en mémoire la même variable partout. Du coup, si y'a ça dans une classe, chaque objet ne portera pas un MAX; ils feront tous référence au même.

Comment initialiser un membre static ?

C++ / Les classes en C++

On le construit avec = pour un type de base ou en lui passant des arguments de constructeur directement (comme un objet statique dans une fonction), le tout dans le fichier source où on le définit (et non dans le header où on le déclare).

Quelle est la différence entre class et struct ?

C++ / Les classes en C++

En pratique, par défaut tout est public dans un struct et tout est private dans une class. Mais on s'en sert aussi pour dénoter des différences de concepts — class suggère une structure objet proche du C++ et struct suggère juste une aggrégation de données proche du C.

Dans quel ordre les objets locaux sont-ils détruits ?

C++ / Les classes en C++

Dans l'ordre inverse de celui où ils ont été déclarés (et non définis !).

Quelles sont les caractéristiques de la matrice associée à un graphe ?

Mathématiques niveau Lycée / Les graphes

Elle contient des valeurs binaires partout, chacune correspondant au fait qu'une arrête existe ou pas entre les nœuds représentés par ses indices. Si le graphe est non-orienté, elle est diagonalement symétrique.

Qu'est-ce qu'une variable aléatoire réelle ?

Mathématiques niveau Lycée / Les probabilités

C'est une variable aléatoire qui peut prendre n'importe quel valeur, pas juste un entier ou même une fraction. Genre 0.5, pi, moins racine de deux, etc.

Quelle est l'allure de la courbe représentative d'une fonction strictement croissante ?

Mathématiques niveau Lycée / Etude de fonctions

Une ligne qui ne fait que monter, sans jamais descendre (parce que croissante) ou être plate (parce que strictement).

Pourquoi la syntaxe TYPE ptr** = new TYPE*[taille*sizeof(TYPE)] est-elle erronée ?

C++ / C++ Builder

Déjà, le paramètre à passer en argument à new[] est le nombre d'éléments (ici "taille"); il s'occupe lui-même de multiplier par leur taille. Mais si on devait multiplier nous-même, comme ptr est un tableau de pointeur vers TYPE, il faudrait multiplier par la taille d'un pointeur vers TYPE, et non par la taille d'un TYPE.

Qu'est-ce que le polymorphisme ?

C++ / Programmation objet en C++

C'est quand tu peux utiliser de la même façon (avec des méthodes de même nom et type) des objets de différents classes sur la même variable. En C++, ça se fait en faisant hériter ces classes d'une classe commune qui a ces méthodes.

Qu'est-ce que la coercition ?

C++ / Programmation objet en C++

C'est quand tu force une valeur à être convertie en valeur d'un autre type implicitement, en la passent comme paramètre à un type qui n'est pas le sien.

Comment gérer les dates et les heures en C++ ?

C++ / Généralités sur le C++

Généralement, on utilise une bibliothèque qui fait tout le travail fastidieux pour nous. Par exemple, en C++11, tu peux regarder du coté de std::chrono.

Le C++ est-il un langage pratique ?

C++ / Généralités sur le C++

Ça dépend. Aujourd'hui, on s'en sert principalement quand la performance est importante; sinon, on utilise plutot des langages qui simplifient le travail en échange de moins bonnes perfs, comme Java ou C#.

Quelques caractéristiques du langage C++ d'un point de vue « business » ?

C++ / Généralités sur le C++

Très performant, très standard (connu de beaucoup de monde) et du coup compatible avec un grand nombre de bibliothèques et outils tiers.

Où trouver de la documentation de référence sur le C++ ?

C++ / Généralités sur le C++

J'utilise cplusplus.com, mais il y a aussi cppreference.com, qui est disponible en français (fr.cppreference.com).

Comment appliquer un style à plusieurs éléments/classes/identifiants ?

CSS / HTML / Généralités en CSS

Avant les accolades, il suffit de séparer les divers identifieurs par des virgules.

Matières enseignées et méthodologie

Lycée

Prépas Scientifiques

Formation Professionnelle

Cours universitaires généraux et Grandes Écoles