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 :

syntaxe d'appel à un objet bizarre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut syntaxe d'appel à un objet bizarre
    Bonjour tous,

    pour commencer: je suis débutant en C++.

    J'ai un problème sur la syntaxe à utiliser pour l'appel à un objet, je ne comprends pas trop comment ca fonctionne..

    ==> j'ai un fichier main.cpp et un AAA.cpp, AAA.cpp permet de lire un fichier texte et de sauvegarder le contenu dans des variables.

    1°) voici comment je l'aurais codé en C (et j'ai donc fait la meme chose en cpp):

    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    include <iostream>  
    #include "AAA.h"
    int main()
    {
        AAA();
    }
    AAA.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
     
    include <iostream>  
    #include "AAA.h"
     
    void BBB();
     
    void AAA()
    {
        "fait certaines choses";
        "fait appel a void BBB pour d'autres choses"
     
    }
     
    void BBB()
    {
         fait des trucs
    }
    et tout cela fonctionne tres bien

    2°) la personne qui me manage sur ce projet m'a dit: on programme en C++ donc il faut utiliser les objets et m'a dit de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    include <iostream>  
    #include "AAA.h"
    using namespace std;
    int main()
    {
        AAA *aaa = new AAA();
        delete aaa;
    }
    et

    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 <iostream>
    #include "AAA.h"
    using namespace std;
    AAA::AAA()
    {
    "la personne met ici le contenu de ma fonction AAA.cpp"
    "et fait appel à BBB"
    }
     
    void AAA::BBB()
    {
         fait des trucs
    }
    à présent je ne comprends plus grand chose car en C++ je n'ai jamais utiliser le constructeur pour faire de telles choses mais plutot pour générer des objet. Ici j'ai l'impression que mon construcuteur sert de fonction...

    De plus je ne comprends pas pourquoi il fait appel à l'objet de cette facon... new ne sert pas à allouer de la memoire dynamiquement? pourquoi faire le delete ensuite???

    ==> d'habitude quand je fait appel un constructeur j'utilise simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aaa(variable1, variable2)
    et le constructeur me créer un objet avec ces valeurs comme attributs donc pour quoi faire ici appel à "new" et mettre un pointeur.... ??


    je suis totalement perdu

  2. #2
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Salut ,
    faire AAA *aaa = new AAA c'est juste pour instancier un objet de la
    classe AAA de façon dynamique (et non statique)

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    salut, merci d'avoir pris le temps de repondre !

    Citation Envoyé par exe2bin Voir le message
    Salut ,
    faire AAA *aaa = new AAA c'est juste pour instancier un objet de la
    classe AAA de façon dynamique (et non statique)
    et quel est l'intérêt de faire cela pour un objet? d'habitude quand "j'appel" un constructeur je ne le fait pas et je fais seulement quelque chose du type:

    ?

    edit:
    pourquoi il utilise un pointeur dans ce cas là?

  4. #4
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Exactement la même utilité qu'un passage par pointeur comme paramètre de
    fonction en C par exemple !

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    Citation Envoyé par exe2bin Voir le message
    Exactement la même utilité qu'un passage par pointeur comme paramètre de
    fonction en C par exemple !
    ce qui me parait bizarre est que lorsque j'utilise un pointeur c'est que j'ai renvoyé à une fonction une adresse avec le signe & or ici il n'y a aucune adresse renvoyée...?

    et en ce qui concerne l'allocation dynamique, pourrais tu me dire qu'es ce que tu en pense (cf. question ci dessus)

  6. #6
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Lorsque tu passe une variable à une fonction par exemple :
    foo(int);
    tu passes uniquement une copie de la valeur entière .
    alors si ta fonction a pour but de changer la valeur de l'int il faudra que tu
    lui passe l'adresse de celui-ci et non plus sa copie : foo(int *);
    Je pense que tu le sais déjà .
    Aussi ,un entier représente (en général) 4 octets en memoire et ne pose pas de problème à copier .
    Par contre une classe composée d'attributs et de methodes en grands nombres
    (de pointeurs aussi) est impossible à transmettre par valeur !!
    En ce cas il faut bien passer l'adresse d'une classe et non une copie .

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

Discussions similaires

  1. [C#] Comment appeler un objet C++ ?
    Par xarius dans le forum C++/CLI
    Réponses: 11
    Dernier message: 28/03/2007, 09h30
  2. Réponses: 4
    Dernier message: 15/11/2005, 10h49
  3. [Excel][VBA][Java] Appeler un objet java
    Par ay_pepito dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/07/2005, 15h46
  4. [10g] Le drop laisse des objets "bizarres"
    Par Oxygene dans le forum Oracle
    Réponses: 9
    Dernier message: 22/02/2005, 15h18
  5. [C#] Problème pour l'appel d'objet...
    Par AntiSAL dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/06/2004, 09h59

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