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 :

Erreur de compilation


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Erreur de compilation
    Bonjour chers amis développeur en C++ ! Jsuis nouveau et je crois avoir besoins de votre aide pour mes erruers dans mon code ! En effet j'ai décidé de faire une simple calculatrice développé en C++ mais en mode console (Un peu naze mais bon, jsuis un debutant) et voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    #include <iostream>
    #include <string>
    #include <cmath>
    using namespace std;
     
    int main()
    {
        bool repeter (true);
        while (repeter==true); {
     
        cout <<"                          Calculatrice By Menzan Christian !"<< endl;
        char choix;
        do {
        cout <<"Pour effectuer une :"<< endl;
        cout <<" Additon appuyer sur \"+\" "<< endl;
        cout <<" soustraction appuyer sur \"-\" "<< endl;
        cout <<" multiplication appuyer sur \"*\" "<< endl;
        cout <<" division appuyer sur \"/\" "<< endl;
        cout <<"Faite votre choix : ";
        cin >> choix; }
        while (choix!='+' || choix!='-' || choix!='*' || choix!='/');
        switch(choix) {
            case '+' :
                int nb;
                cout <<"Donner le nombre d'operande pour le calcul : ";
                cin >>nb;
                int compteur (1);
                double somme (0);
                for (compteur=1; compteur<=nb; compteur++) {
                        double nombre;
                    cout <<"Donner le nombre "<< compteur <<" : ";
                    cin >> nombre;
                    somme= somme+nombre; }
                    cout<<"Le resultat est : "<< somme <<" !" << endl;
                break;
     
             case '-':
                int nb;
                cout <<"Donner le nombre d'operande pour le calcul : ";
                cin >>nb;
                int compteur (1);
                double somme (0);
                for (compteur=1; compteur<=nb; compteur++) {
                        double nombre;
                    cout <<"Donner le nombre "<< compteur <<" : ";
                    cin >> nombre;
                    somme= somme-nombre; }
                    cout<<"Le resultat est : "<< somme <<" !" << endl;
                break;
     
              case '*' :
                int nb;
                cout <<"Donner le nombre d'operande pour le calcul : ";
                cin >>nb;
                int compteur (1);
                double somme (0);
                for (compteur=1; compteur<=nb; compteur++) {
                        double nombre;
                    cout <<"Donner le nombre "<< compteur <<" : ";
                    cin >> nombre;
                    somme= somme*nombre; }
                    cout<<"Le resultat est : "<< somme <<" !" << endl;
                break;
     
               case '/' :
                int nb;
                cout <<"Donner le nombre d'operande pour le calcul : ";
                cin >>nb;
                int compteur (1);
                double somme (0);
                for (compteur=1; compteur<=nb; compteur++) {
                        double nombre;
                    cout <<"Donner le nombre "<< compteur <<" : ";
                    cin >> nombre;
                    somme= somme/nombre; }
                    cout<<"Le resultat est : "<< somme <<" !" << endl;
                break;
     
               default :
                cout <<"Erreur système" <<endl;
                break;
                }
     
    }
        return 0;
    }
    Le problème est que quand je le compile, on me signale plusieurs erreurs que j'arrive pas a corriger ! J'ai besoins de votre aide pour analyser mon code
    et mieux m'expliquer les erreurs que j'ai commises et j'aimerais que vous m’aidiez a les corrigés ! Merci de votre attention et j'attend vos réponses !
    MERCI D'AVANCE !

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    Hello,

    que te dit ton compilateur exactement?

  3. #3
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 439
    Points
    2 439
    Par défaut
    Bonjour.



    Ton code présente plusieurs problèmes :

    bool repeter (true); On préfère la syntaxe bool repeter = true; pour initialiser les variables.


    while (repeter==true); {
    Attention à ce point-virgule vicieux, car il empêche tout ce qui suit entre les accolades de s’exécuter !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int nb;
    cin >>nb;
    int compteur (1);
    double somme (0);
    Les variables locales avec le même nom ne peuvent pas être déclarées à l'intérieur d'un switch, même dans deux case différents. Il faut les déplacer à l’extérieur.


    do {/**/} while (choix!='+' || choix!='-' || choix!='*' || choix!='/'); Il vaut mieux remplacer les || par des &&.

    Il n'y a aucun moyen de sortir de la première boucle (répéter vaut toujours true).

    Lors de la division, tu ne vérifies pas si l'utilisateur divise par 0 (ce qui est mathématiquement impossible).
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  4. #4
    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
    Par ailleurs, il n'est pas vraiment intéressant d'écrire while (condition==true) ou if (condition==true).
    En effet, dans les deux cas, l'expression entre parenthèse est comparée à true.

    while (condition) ou if (condition) suffisent, sont équivalentes aux précédentes, et sont à la fois plus concise et plus claire si la variable condition est bien nommée.
    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

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Novembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 15
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Mis à part les erreurs d'écriture, il y a également une réflexion à avoir sur la structure du code. Apprendre le C++ ne consiste pas seulement à savoir écrire en C++ mais aussi à penser objet.

    Bonne continuation et bon courage !

  6. #6
    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,
    Citation Envoyé par manudiclemente Voir le message
    bool repeter (true); On préfère la syntaxe bool repeter = true; pour initialiser les variables.
    Humm... à voir...

    De manière générale, les deux codes font absolument la même chose mais le premier ( bool repeter (true); ) utilise une syntaxe qui sera forcément acceptée n'importe quand, alors que le second pourrait ne pas être accepté par certains types définis par l'utilisateur (comme les classes ayant sémantique d'entité).

    L'un dans l'autre, utiliser la syntaxe qui correspond à l'utilisation d'un (pseudo) constructeur est donc beaucoup plus intéressant car susceptible de fonctionner systématiquement.
    Citation Envoyé par MisterBobo Voir le message
    Bonjour,

    Mis à part les erreurs d'écriture, il y a également une réflexion à avoir sur la structure du code. Apprendre le C++ ne consiste pas seulement à savoir écrire en C++ mais aussi à penser objet.
    Heu, là encore, il y a moyen de chicaner un sérieux coup...

    Bien sur, le paradigme orienté objet apporte énormément de facilités, mais, s'il fallait s'en tenir à ce seul paradigme, C++ aurait fait comme d'autres langages et aurait fait en sorte de ne permettre que ce paradigme.

    Or, C++ est un langage multi paradigme ou -- étant donné la définition quelque peut restrictive que l'on trouve pour le terme paradigme -- disons multi points de vues et permet l'utilisation des paradigmes impératif pur et générique, et tu peux avoir la certitude que c'est parce qu'il a une bonne raison pour ce faire

    Le paradigme orienté objet est parfait pour résoudre les problèmes de substituabilité, mais ce n'est pas pour cela qu'il faut forcément l'utiliser à tord et à travers lorsque de simples fonctions libres suffisent amplement.

    Par contre, il y a une chose qui est tout à fait vraie et qui correspond peut être à ce que tu voulais dire concernant le code de notre ami : il devrait veiller à respecter le principe de la responsabilité unique. Chaque type et chaque fonction ne devraient avoir qu'une seule responsabilité clairement établie afin de s'assurer qu'il la prenne correctement en charge.

    Dans le code de la fonction main, je vois assez facilement de quoi faire trois fonctions distinctes, répondant chacune à un besoin clairement distinct. Mais, bien qu'il s'agisse du S de SOLID, ce principe est valable pour n'importe quel paradigme
    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

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    les erreurs se signalent a partir du : case '-' ; a la ligne 37

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Novembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 15
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Heu, là encore, il y a moyen de chicaner un sérieux coup...

    Or, C++ est un langage multi paradigme ou -- étant donné la définition quelque peut restrictive que l'on trouve pour le terme paradigme -- disons multi points de vues et permet l'utilisation des paradigmes impératif pur et générique, et tu peux avoir la certitude que c'est parce qu'il a une bonne raison pour ce faire

    Le paradigme orienté objet est parfait pour résoudre les problèmes de substituabilité, mais ce n'est pas pour cela qu'il faut forcément l'utiliser à tord et à travers lorsque de simples fonctions libres suffisent amplement.
    J'en conviens tout à fait et sur tous les points.

    Je vais détailler mon idée, C++ a été réalisé dans le but d'intégrer le paradigme objet sur la base du C et de ce fait il autorise en autre la programmation procédurale (qui pour être correctement réalisée devrait respecter le S de SOLID emprunté à la POO). Toutefois je voulais signifier que quitte à choisir un langage orienté objet autant utiliser la "méthode de conception" objet (penser objet) qui, à mon sens, ne consiste pas nécessairement à définir systématiquement des classes - on pourrait peut être s'en passer ici - mais surtout à se poser les (bonnes ?) questions de sorte à apporter une structure à son programme. Appliquée ici, elle n'aurait peut être pas apporté la structure la plus pertinente mais y en aurait au moins apporté une.

    Je peux cependant modérer mon propos, apprendre le C++ ne consiste pas seulement à savoir écrire en C++ mais entre autre à penser objet.

    Mais si penser objet n'est pas l'unique concept nécessaire à la maîtrise du C++ c'est un prérequis à sa compréhension et c'est indispensable pour aller plus loin. Par ailleurs s'investir dans la pensée objet ne permet pas uniquement de structurer un programme mais également de visualiser ou construire des structures logicielles plus complexes, de formuler des problèmes (hors programmation), ...

    Cela n'engage que moi mais je pense que c'est une bonne façon de débuter et qui ouvre le champs des possibles .

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Novembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 15
    Points : 25
    Points
    25
    Par défaut
    Et j'en aurais oublié de répondre à la question.

    Citation Envoyé par MayChristian Voir le message
    les erreurs se signalent a partir du : case '-' ; a la ligne 37
    La syntaxe du switch case est mal appropriée puisque sans accolade ouvrante et fermante elle occasionne des définitions multiples (somme par exemple). Ton code corrigé (pour cette aspect) deviendrait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    int main()
    {
    	bool repeter = true;
    	while (repeter) {
     
    		cout << "                          Calculatrice By Menzan Christian !" << endl;
    		char choix;
    		do {
    			cout << "Pour effectuer une :" << endl;
    			cout << " Additon appuyer sur \"+\" " << endl;
    			cout << " soustraction appuyer sur \"-\" " << endl;
    			cout << " multiplication appuyer sur \"*\" " << endl;
    			cout << " division appuyer sur \"/\" " << endl;
    			cout << "Faite votre choix : ";
    			cin >> choix;
    		} while (choix != '+' && choix != '-' && choix != '*' && choix != '/');
    		switch (choix) {
    		case '+':
    		{
    			int nb;
    			cout << "Donner le nombre d'operande pour le calcul : ";
    			cin >> nb;
    			int compteur(1);
    			double somme(0);
    			for (compteur = 1; compteur <= nb; compteur++) {
    				double nombre;
    				cout << "Donner le nombre " << compteur << " : ";
    				cin >> nombre;
    				somme = somme + nombre;
    			}
    			cout << "Le resultat est : " << somme << " !" << endl;
    			break;
    		}
    		case '-':
    		{
    			int nb;
    			cout << "Donner le nombre d'operande pour le calcul : ";
    			cin >> nb;
    			int compteur(1);
    			double somme(0);
    			for (compteur = 1; compteur <= nb; compteur++) {
    				double nombre;
    				cout << "Donner le nombre " << compteur << " : ";
    				cin >> nombre;
    				somme = somme - nombre;
    			}
    			cout << "Le resultat est : " << somme << " !" << endl;
    			break;
    		}
    		case '*':
    		{
    			int nb;
    			cout << "Donner le nombre d'operande pour le calcul : ";
    			cin >> nb;
    			int compteur(1);
    			double somme(0);
    			for (compteur = 1; compteur <= nb; compteur++) {
    				double nombre;
    				cout << "Donner le nombre " << compteur << " : ";
    				cin >> nombre;
    				somme = somme*nombre;
    			}
    			cout << "Le resultat est : " << somme << " !" << endl;
    			break;
    		}
    		case '/':
    		{
    			int nb;
    			cout << "Donner le nombre d'operande pour le calcul : ";
    			cin >> nb;
    			int compteur(1);
    			double somme(0);
    			for (compteur = 1; compteur <= nb; compteur++) {
    				double nombre;
    				cout << "Donner le nombre " << compteur << " : ";
    				cin >> nombre;
    				somme = somme / nombre;
    			}
    			cout << "Le resultat est : " << somme << " !" << endl;
    			break;
    		}
    		default:
    		{
    			cout << "Erreur système" << endl;
    			break;
    		}
    		}
     
    	}
    	return 0;
    }
    Il compile sans erreurs est semble faire ce qui est souhaité.

  10. #10
    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
    Mais ca serait mieux avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    int main()
    {
    	bool repeter = true;
    	while (repeter) {
     
    		cout << "                          Calculatrice By Menzan Christian !" << endl;
    		char choix;
    		do {
    			cout << "Pour effectuer une :" << endl;
    			cout << " Additon appuyer sur \"+\" " << endl;
    			cout << " soustraction appuyer sur \"-\" " << endl;
    			cout << " multiplication appuyer sur \"*\" " << endl;
    			cout << " division appuyer sur \"/\" " << endl;
    			cout << "Faite votre choix : ";
    			cin >> choix;
    		} while (choix != '+' && choix != '-' && choix != '*' && choix != '/');
     
    		int nb;
    		cout << "Donner le nombre d'operande pour le calcul : ";
    		cin >> nb;
    		double somme = 0;
    		switch (choix) {
    		case '+':
    			for (int compteur = 1; compteur <= nb; compteur++) {
    				double nombre;
    				cout << "Donner le nombre " << compteur << " : ";
    				cin >> nombre;
    				somme = somme + nombre;
    			}
    			cout << "Le resultat est : " << somme << " !" << endl;
    			break;
    		case '-':
    			for (int compteur = 1; compteur <= nb; compteur++) {
    				double nombre;
    				cout << "Donner le nombre " << compteur << " : ";
    				cin >> nombre;
    				somme = somme - nombre;
    			}
    			cout << "Le resultat est : " << somme << " !" << endl;
    			break;
    		case '*':
    			for (int  compteur = 1; compteur <= nb; compteur++) {
    				double nombre;
    				cout << "Donner le nombre " << compteur << " : ";
    				cin >> nombre;
    				somme = somme*nombre;
    			}
    			cout << "Le resultat est : " << somme << " !" << endl;
    			break;
    		case '/':
    			for (int compteur = 1; compteur <= nb; compteur++) {
    				double nombre;
    				cout << "Donner le nombre " << compteur << " : ";
    				cin >> nombre;
    				somme = somme / nombre;
    			}
    			cout << "Le resultat est : " << somme << " !" << endl;
    			break;
    		default:
    			cout << "Erreur système" << endl;
    			break;
    		}
     
    	}
    	return 0;
    }
    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

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par MisterBobo Voir le message
    J'en conviens tout à fait et sur tous les points.

    Je vais détailler mon idée, C++ a été réalisé dans le but d'intégrer le paradigme objet sur la base du C et de ce fait il autorise en autre la programmation procédurale (qui pour être correctement réalisée devrait respecter le S de SOLID emprunté à la POO). Toutefois je voulais signifier que quitte à choisir un langage orienté objet autant utiliser la "méthode de conception" objet (penser objet) qui, à mon sens, ne consiste pas nécessairement à définir systématiquement des classes - on pourrait peut être s'en passer ici - mais surtout à se poser les (bonnes ?) questions de sorte à apporter une structure à son programme. Appliquée ici, elle n'aurait peut être pas apporté la structure la plus pertinente mais y en aurait au moins apporté une.

    Je peux cependant modérer mon propos, apprendre le C++ ne consiste pas seulement à savoir écrire en C++ mais entre autre à penser objet.

    Mais si penser objet n'est pas l'unique concept nécessaire à la maîtrise du C++ c'est un prérequis à sa compréhension et c'est indispensable pour aller plus loin. Par ailleurs s'investir dans la pensée objet ne permet pas uniquement de structurer un programme mais également de visualiser ou construire des structures logicielles plus complexes, de formuler des problèmes (hors programmation), ...

    Cela n'engage que moi mais je pense que c'est une bonne façon de débuter et qui ouvre le champs des possibles .
    Hors sujet mais : t'es conscient qu'on peut "faire de l'objet" en C ?
    un simple exemple que tout le monde (re)connaitra : FILE*
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Novembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 15
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Hors sujet mais : t'es conscient qu'on peut "faire de l'objet" en C ?
    un simple exemple que tout le monde (re)connaitra : FILE*
    Oui, comme ici par exemple ? Où pour citer la première ligne :
    Le langage C n'est pas un langage orienté objet, mais nous allons voir dans ce document que si l'on structure notre code selon des règles strictes que l'on va établir et que l'on n'en déroge pas, on peut s'approcher de la programmation orientée objet.
    Je pense aussi, et je sais, qu'on peut enfoncer un clou avec une chaussure mais je trouve ça beaucoup plus pratique d'utiliser un marteau ...

  13. #13
    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
    Citation Envoyé par MisterBobo Voir le message
    Oui, comme ici par exemple ? Où pour citer la première ligne :


    Je pense aussi, et je sais, qu'on peut enfoncer un clou avec une chaussure mais je trouve ça beaucoup plus pratique d'utiliser un marteau ...
    Sauf qu'il ne suffit pas d'arriver à encapsuler les données pour faire de l'orienté objet...

    Ceux qui disent encore cela sont ceux qui en sont restés à l'approche historique (et totalement fausse au demeurant) selon laquelle la grosse nouveauté de l'objet est l'encapsulation (*).

    Car, comme Bousk vient de le faire valoir, l'encapsulation est possible en procédural, bien que les mécanismes à mettre en place pour en profiter n'en rendent pas l'utilisation des plus aisées.

    Non, la grosse nouveauté de l'objet, c'est de permettre la substituabilité (la possibilité de transmettre à une fonction un objet d'un type "passant pour" etre du type de l'objet attendu) et les comportements polymorphes qui en découlent directement.

    Dans le cas présent, l'encapsulation est déjà secondaire car il n'y a pas à proprement parler quoi que ce soit à encapsuler. Le principe de la responsabilité unique est un principe du paradigme procédural, repris par le paradigme objet "par la force des choses" (vu que l'objet utilise malgré tout le paradigme impératif pour la définition des comportements), et la substituabilité ne joue absolument aucun rôle, vu qu'il n'y a purement et simplement pas lieu de penser à une hiérarchie de classes.

    (*) en fait, cette idée que la nouveauté du paradigme objet était l'encapsulation vient de quelque commercial ayant très mal compris ce qu'est réellement ce paradigme qui devait bien trouver "quelque chose" pour le mettre en valeur et arriver à le "vendre"... Il faut dire que l'encapsulation permet de sécuriser l'utilisation que l'on fait des données et, comme le paradigme objet propose malgré tout des mécanismes qui en facilitent la mise en oeuvre, c'est tout ce qu'il en avait retenu. Mais l'encapsulation est l'arbre qui cache la foret
    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

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En fait, c'est une confusion entre "objet" et "type abstrait de données"
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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