IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

C++ sans le C


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Points : 53
    Points
    53
    Par défaut C++ sans le C
    Bonjour

    On me demande de faire des régles de codage pure C++. C'est à dire en supprimant les méthodes du C ayant un remplacant C++.

    C'est bête mais je séche.

    J'ai identifié
    - Pas de structure mais des classe
    - pas de malloc/free mais des new/delete
    - pas de pointeur de fonctions
    - pas de #define (#define PI 3.14 mais static const double pi=3.14)
    - réduction de la portée des variable (déclaration au plus prés de l'utilisation)
    - utilisaition de la stl

    et...

    Des idées ???
    merci

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    pas de pointeur nu -> pointeur intelligent

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Points : 725
    Points
    725
    Par défaut
    Salut,

    - Pas de structure mais des classe
    Je ne suis pas trop d'accord sur ce point. Se priver de faire un POD tout bête quand il n'y a pas besoin de plus revient à se forcer à faire compliqué quand on peut faire simple. Après tout dépend de son utilisation.

    Pour compléter ta liste :
    - Pas de tableaux de char mais des std::string
    - Pas de tableaux, mais des std::vector/std::array
    - Pas de setlocale, mais std::locale
    - numeric_limits<int>::max plutôt que la macro INT_MAX

    Si tu as droit à C++11 :
    - remplacement de rand() par <random>
    - remplacement de ton api native de threads par <thread>
    "By and large I'm trying to minimize mentions of D in C++ contexts because it's as unfair as bringing a machine gun to a knife fight." - Andrei Alexandrescu

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par stardeath Voir le message
    pas de pointeur nu -> pointeur intelligent
    My god, surtout pas ! Les pointeurs intelligents répondent à des besoins précis, il ne faut surtout pas en faire une utilisation systématique.

    Citation Envoyé par Niark13 Voir le message
    Je ne suis pas trop d'accord sur ce point. Se priver de faire un POD tout bête quand il n'y a pas besoin de plus revient à se forcer à faire compliqué quand on peut faire simple.
    Ca va plus loin que ça, les struct C++ ne sont d'ailleurs pas des struct C, ils sont quasiment identiques aux classes et sont très utilisés.

    Une règle importante selon moi: remplacer les cast C par des casts C++.
    Find me on github

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    - pas de pointeur de fonctions
    « ... là où d'autres stratégies (polymorphisme, foncteurs, ...) suffisent » ?

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    My god, surtout pas ! Les pointeurs intelligents répondent à des besoins précis, il ne faut surtout pas en faire une utilisation systématique.
    bah je dirai comme toutes les fonctionnalités du "c" dans ce cas.
    utiliser des pointeurs intelligents, c'est une des premiers choses qu'on fait quand on commence à jouer avec les exceptions, le surtout pas est un peu gros.

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    D'accord c'est un peu sec, pardon , mais c'est pour bien mettre en garde l'op ! Je voulais dire "ne surtout pas instaurer comme règle de remplacer les pointeurs nus par des pointeurs intelligents". Ca reste des cas assez rare dans la pratique. Les pointeurs intelligents ont un sens fort sur le cycle de vie de l'objet, il faut être très prudent avec. Je te renvoie vers cet article qui traite du sujet en profondeur.
    Find me on github

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 936
    Points
    4 936
    Par défaut
    pas de problème, je suis d'accord

    pas de macro genre min, max, avantageusement remplacé par des template et/ou fonction inline.

  9. #9
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    D'une manière générale, je dirai:
    Citation Envoyé par ma signature du moment
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    J'y ajoute aussi:
    • RAII toujours, rira bien qui finira son programme…
    • commente d'abord, programme après, le commentaire en sera toujours plus utile
    • le code s'écrit du papier au clavier, jamais dans l'autre sens
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Points : 725
    Points
    725
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    Ca va plus loin que ça, les struct C++ ne sont d'ailleurs pas des struct C, ils sont quasiment identiques aux classes et sont très utilisés.
    Ça me semblait tellement évident que j'ai sous-entendu que struct == POD dans le message d'origine. Mea culpa
    "By and large I'm trying to minimize mentions of D in C++ contexts because it's as unfair as bringing a machine gun to a knife fight." - Andrei Alexandrescu

  11. #11
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Je mettrais en gros et en tout premier lieu: Penser en terme de services rendus et non en terme de données utilisées

    N'oublies pas que l'encapsulation n'est pas le principe de base de la programmation OO, même si ce principe a quelque part été "institutionnalisé" avec ce paradigme

    Le principe de base de la programmation OO est la substituabilité (le fait de pouvoir faire passer un pointeur (ou une référence) sur un objet d'un type dérivé pour un pointeur (ou une référence) sur un objet du type de base

    Je rajouterais très vite le respect primordial de LSP (et des autres principes SOLID)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  12. #12
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    My god, surtout pas ! Les pointeurs intelligents répondent à des besoins précis, il ne faut surtout pas en faire une utilisation systématique.
    Il y a toujours std::unique_ptr<> en C++11 (et std::auto_ptr<> en C++98, en faisant très attention à ce qui se passe). Ceux là peuvent remplacer des pointeurs nus, mais encore faut-il apprendre à s'en servir pour éviter leurs pièges restrictifs (avec std::unique_ptr<>, il faut souvent jouer avec la sémantique de mouvement ; avec std::auto_ptr<>, outre le fait que l'achat d'une corde utile pour un éventuel suicide, il faut faire attention à la sémantique de mouvement implicite).

    Citation Envoyé par jblecanard Voir le message
    Ca va plus loin que ça, les struct C++ ne sont d'ailleurs pas des struct C, ils sont quasiment identiques aux classes et sont très utilisés.
    Je te suis sur ce point - les struct ne doivent pas être écartées du langage - elles sont extrêmement importantes : c'est souvent une struct qu'on utilisera par exemple pour définir un foncteur ou les classes helper cachées dans une implémentation template complexe (parce que la sémantique du tout public sauf ce qui est marqué comme ne l'étant pas permet d'écrire un code un peu plus compact qu'en utilisant une classe).

    Citation Envoyé par Niark13 Voir le message
    Ça me semblait tellement évident que j'ai sous-entendu que struct == POD dans le message d'origine. Mea culpa
    Les types POD ont nécessairement leur utilité. Par exemple, le header d'un fichier sera exprimé sous la forme d'un POD, une structure avec laquelle on communique avec l'OS idem, etc.

    Citation Envoyé par jblecanard Voir le message
    Une règle importante selon moi: remplacer les cast C par des casts C++.
    Ca, oui. Par contre il faut bien comprendre les règles permattant de distinguer const_cast<>, dynamic_cast<>, static_cast<> et reinterpret_cast<> - et ne pas se contenter de remplacer tous les casts C par des reinterpret_cast<>.

    Un règle importante selon moi : pas de pointeurs void en C++.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  13. #13
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 52
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par Niark13 Voir le message
    Salut,
    Je ne suis pas trop d'accord sur ce point. Se priver de faire un POD tout bête quand il n'y a pas besoin de plus revient à se forcer à faire compliqué quand on peut faire simple. Après tout dépend de son utilisation.
    Effectivement c'est peut être un peut bcp de faire une classe pour un POD. mon idée été l'utilisation de code dans une struct.

    Citation Envoyé par leternel Voir le message
    D'une manière générale, je dirai:
    • commente d'abord, programme après, le commentaire en sera toujours plus utile
    • le code s'écrit du papier au clavier, jamais dans l'autre sens
    Ça c'est aussi valable pour le C, le Java, le VB, le Php, le ....

    Citation Envoyé par Emmanuel Deloget Voir le message
    Ca, oui. Par contre il faut bien comprendre les règles permattant de distinguer const_cast<>, dynamic_cast<>, static_cast<> et reinterpret_cast<> - et ne pas se contenter de remplacer tous les casts C par des reinterpret_cast<>.
    Const_cast: J'ai pas encore compris à quoi cela peu servir


    Citation Envoyé par Emmanuel Deloget Voir le message
    Un règle importante selon moi : pas de pointeurs void en C++.
    Je signe

  14. #14
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Points : 725
    Points
    725
    Par défaut
    Citation Envoyé par Mizar75 Voir le message
    Const_cast: J'ai pas encore compris à quoi cela peu servir
    Si tu utilises des fonctions C qui datent de Mathusalem et qui ont des paramètres déclarés comme char* alors qu'elles ne modifient pas les données. Par exemple, certaines version libiconv.

    À part ça, effectivement, l'emploi de const_cast est dur à justifier.
    "By and large I'm trying to minimize mentions of D in C++ contexts because it's as unfair as bringing a machine gun to a knife fight." - Andrei Alexandrescu

  15. #15
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    const_cast sert aussi dans l'écriture d'implémentation de couple de fonction const/non_const pour écrire l'une en fonction de l'autre (factorisation du code).

  16. #16
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par Niark13 Voir le message
    À part ça, effectivement, l'emploi de const_cast est dur à justifier.
    Quand tu arrives dans une base de code dans laquelle const été sous utilisé et que tu veux toi utilisons la constness un peu proprement... tu ne peux pas mettre à jour tout le code concerné parce que introduire du const là ou il n'y en avait pas se révèle très fastidieux. Ou alors parce que le code n'appartient pas à ton équipe et que tu ne peux pas le modifier. Et tu ne veux pas non plus ne pas utiliser const en te disant "tant pis fuck ça compilera". Donc quelques const_cast bien choisis peuvent se révéler utiles... du moment qu'on sait ce qu'on fait et qu'on maitrise la situation.
    Find me on github

  17. #17
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    My god, surtout pas ! Les pointeurs intelligents répondent à des besoins précis, il ne faut surtout pas en faire une utilisation systématique.
    Comme le dit Emmanuel, les pointeurs intelligents ne se limitent pas aux pointeurs à comptage de référence. std::vector est d'une certaine façon un pointeur intelligent -- bien qu'il rendent bien d'autres services.

    Si tu préfères, il faut systématiser les capsules RAII. Au développeur ensuite de savoir choisir la bonne capsule pour chaque cas. J'aime beaucoup l'article de Lahman au sujet de l'écriture de code robuste.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  2. [TP]Compiler un prog sans entrer dans TP7
    Par poppels dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 23/10/2002, 18h46
  3. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  4. [Kylix] Fiches sans bordure
    Par alex dans le forum EDI
    Réponses: 4
    Dernier message: 28/04/2002, 21h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo