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 :

POO C++. Pourquoi mon constructeur refuse de s'exécuter sans paramètre ?


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par défaut POO C++. Pourquoi mon constructeur refuse de s'exécuter sans paramètre ?
    Bonjour

    Je fais mes premiers pas en POO C++ et j'essaie de faire des petits exercices.
    J'ai le code suivant dont le constructeur refuse de s'exécuter si je ne donne aucun paramètre au moment de l'instanciation de mon objet c1 :
    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
    #include<iostream>
    using namespace std;
    class calculator {
       int _number1;
       int _number2;
       char _symbol;
       public :
       void add() {
          cout<<"The sum is "<<_number1 + _number2 << endl ;
       }
       void subtract() {
          cout<<"The subtraction is "<<_number1 - _number2 << endl ;
       }
       void multiply() {
          cout<<"The multiplication is "<<_number1 * _number2 << endl ;
       }
       void divide() {
          cout<<"The division is "<<_number1 / _number2 << endl ;
       }
       calculator () {
        cout << "Entrée dans calculator's constructor " << endl;
        int a;
          int b;
          char sym;
          cout << "Entrez 1er nombre : " << endl;
          cin >> a;
          cout << "Entrez second nombre : " << endl;
          cin >> b;
     
          cout << "Quelle opération voulez vous faire ? +, -, *, / ? " << endl;
          cin >> sym;
          _number1 = a;
          _number2 = b;
          _symbol = sym;
          switch(_symbol){
             case '+' : add();
                break;
             case '-' : subtract();
                break;
             case '*' : multiply();
                break;
             case '/' : divide();
                break;
             default : cout<< "Wrong operator" << endl;
          }
         cout << "\n\nSortie de calculator's constructor " << endl;
     
       }
    };
    int main() {
       cout << "Entrée dans main " << endl;
     
       calculator c1();
       cout << "Après instanciation de c1 " << endl;
     
    }

    Par contre, si je modifie le code de manière à ce que mon constructeur ai besoin d'un paramètre, il s'exécute correctement :

    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
    #include<iostream>
    using namespace std;
    class calculator {
       int _number1;
       int _number2;
       char _symbol;
       public :
       void add() {
          cout<<"The sum is "<<_number1 + _number2 << endl ;
       }
       void subtract() {
          cout<<"The subtraction is "<<_number1 - _number2 << endl ;
       }
       void multiply() {
          cout<<"The multiplication is "<<_number1 * _number2 << endl ;
       }
       void divide() {
          cout<<"The division is "<<_number1 / _number2 << endl ;
       }
       calculator () {
        cout << "Entrée dans calculator's constructor " << endl;
        int a;
          int b;
          char sym;
          cout << "Entrez 1er nombre : " << endl;
          cin >> a;
          cout << "Entrez second nombre : " << endl;
          cin >> b;
     
          cout << "Quelle opération voulez vous faire ? +, -, *, / ? " << endl;
          cin >> sym;
          _number1 = a;
          _number2 = b;
          _symbol = sym;
          switch(_symbol){
             case '+' : add();
                break;
             case '-' : subtract();
                break;
             case '*' : multiply();
                break;
             case '/' : divide();
                break;
             default : cout<< "Wrong operator" << endl;
          }
         cout << "\n\nSortie de calculator's constructor " << endl;
     
       }
    };
    int main() {
       cout << "Entrée dans main " << endl;
     
       calculator c1();
       cout << "Après instanciation de c1 " << endl;
     
    }
    Je ne vois pas pourquoi j'ai absolument besoin d'un paramètre au minimum ?

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Les 2 codes que tu montres sont identiques.
    Et tu n'as absolument pas besoin d'un paramètre.
    Mais quand tu écris calculator c1();, le compilateur ne voit pas la construction d'un objet c1 sans paramètre mais la forward declaration d'une fonction qui s'appelle c1, retourne un calculator et ne prend pas de paramètre.
    Pour créer un calculator, on écrit calculator c1;.
    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.

  3. #3
    Membre confirmé
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Juin 2014
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Juin 2014
    Messages : 219
    Par défaut
    Arf, en effet !

    Merci.

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Ce "phénomène" est tellement classique qu'il a un nom https://en.wikipedia.org/wiki/Most_vexing_parse

    On est tou·te·s tombé·e·s dans le panneau une fois

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/07/2010, 09h19
  2. Réponses: 4
    Dernier message: 20/04/2008, 20h12
  3. [D6] Mon application refuse de s'arrêter
    Par ybruant dans le forum Langage
    Réponses: 8
    Dernier message: 06/12/2007, 11h20
  4. [POO-Héritage] Appel du constructeur en PHP4.3.2
    Par raoulchatigre dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2005, 15h37
  5. pourquoi mon quickreport n'affiche rien ?
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 8
    Dernier message: 31/07/2005, 00h59

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