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 :

appel d'une fonction d'une classe


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 371
    Par défaut appel d'une fonction d'une classe
    bonjour,

    1)j'écris dans un seul fichier sur www.replit.com ce petit 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
     
    #include <string>
    #include <stdio.h>
     
     
     
     class A{
     
       public:
     
      int mama(void)
      {
        int a,t1,t2;
        printf("entrez 1er entier: ");
        scanf("%d",&t1);
        printf("entrez 2ème entier: ");
        scanf("%d",&t2);
     
     
        a=t1+t2;
        return a;
      }
    };
     
    int main() {
     
      A objet;
      objet.mama();
      return 0;
     
    }
    Pourquoi ça ne fonctionne pas?

    2)maintenant,dans le projet de replit.com,j'utilise 2 fichiers cpp

    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
     
    #include <string>
    #include <stdio.h>
     
     
    int main() {
     
      A objet;
      objet.mama();
      return 0;
     
    }
    puis fichier2.cpp
    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
     
     
    #include <string>
    #include <stdio.h>
     
     
     
     class A{
     
       public:
     
      int mama(void)
      {
        int a,t1,t2;
        printf("entrez 1er entier: ");
        scanf("%d",&t1);
        printf("entrez 2ème entier: ");
        scanf("%d",&t2);
     
     
        a=t1+t2;
        return a;
      }
    };
    Est-ce que 2) est équivlent à 1) ?
    Si non,pourquoi?
    Comment corriger 2) pour obtenir l'équivalence?


    merci de votre aide

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    Par défaut
    Cette ligne A.objet; n'a aucun sens.
    Tu connais pas la syntaxe pour créer une variable ?
    https://www.cplusplus.com/doc/tutorial/classes/
    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 très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 371
    Par défaut
    je repose la question corrigée

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    Billets dans le blog
    4
    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.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    La FAQ explique très bien comment utiliser les fichiers d'entête.
    Il est important de comprendre que pour pouvoir utiliser la classe A, le main() doit connaitre toutes les caractéristiques accessible de A, on doit donc utiliser un #include.
    Donc mettre ta classe dans un entête serait une solution. Mais tu coup ta fonction mama() se retrouve dans l'entête, ça marche mais pour des raisons de clarté et d'optimisation c'est à éviter. Il faut donc compiler 2 fichiers qui seraient "reliés" par un entête commun. Et n'utilise pas <stdio.h> et printf() c'est du C, tout comme mettre void comme paramètre, c'est toléré mais!
    entete_a.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifndef ENTETE_A_H_
    #define ENTETE_A_H_
     
     class A {         // la classe A est définie ici
     public:
      int  mama();     // la fonction mama() de A est déclarée ici
    };
     
    #endif
    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <iostream>
    #include "entete_a.h"
     
    int  main() {
      A  objet;              // main() peut utiliser A car il l'a "vu" dans l'entête
      int  resultat = objet.mama();
      std::cout << "resultat : " << resultat << "\n";
    }
    a.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <iostream>
    #include "entete_a.h"
     
      int  A::mama() {       // la fonction mama() de A est définie ici
        int  t1, t2;
        std::cout << "entrez 1er entier: " << std::flush;
        std::cin >> t1;
        std::cout << "entrez 2ème entier: " << std::flush;
        std::cin >> t2;
     
        return  t1 + t2;
      }

  6. #6
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 371
    Par défaut
    merci dalfab

    de nouvelles petites questions se posent suite à la solution de dalfab
    3)Le 1er code de dalfab est à inclure dans un fichier d'en tête par exemple entête.h
    Est-ce bien cela?

    4)j'ai l'impression qu'on a pas le droit d'implémenter le corps de la fonction mama dans la classe A:on peut seulement la déclarer.
    Est-ce bien cela?

    5)dans le fichier a.cpp ,on définit un constructeur de la classe A.
    a)Est-ce bien cela?
    b)aurait-on pu le définir dans le fichier d'entête dans la déclaration de la classe A comme 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
     
    #include <iostream>
     
    #ifndef ENTETE_A_H_
    #define ENTETE_A_H_
     
     
     class A {         // la classe A est définie ici
     public:
      int  mama();     // la fonction mama() de A est déclarée ici
     
     int  A::mama() {       
        int  t1, t2;
        std::cout << "entrez 1er entier: " << std::flush;
        std::cin >> t1;
        std::cout << "entrez 2ème entier: " << std::flush;
        std::cin >> t2;
     
        return  t1 + t2;
      }
     
    };
     
    #endif

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

Discussions similaires

  1. appel d'une classe dans une fonction
    Par fraisa1985 dans le forum Général Java
    Réponses: 7
    Dernier message: 27/03/2008, 12h11
  2. [applet][Debutante] Appel a une classe externe
    Par Skydoll dans le forum Applets
    Réponses: 3
    Dernier message: 30/01/2006, 10h31
  3. Réponses: 14
    Dernier message: 04/12/2005, 08h08
  4. [PL/SQL]Appel d'une classe/méthode java
    Par marsup54 dans le forum SQL
    Réponses: 4
    Dernier message: 30/06/2004, 16h44

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