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 :

Questions theoriques en C++


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 17
    Par défaut Questions theoriques en C++
    Bonjour a tous, pour nous aider a comprendre la theorie, l'ecole nous a donne un code ainsi que des questions qui ne sont pas a rendre, mais qu'ils nous ont fortement recommandes pour nous aider a comprendre de facon poussee la base du C++.

    Voici le 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
     
    class D
    {
    };
     
    class C
    {
    public:
        C(int k) : arrSize(k)
        {
            arr = new int[k];
        }
        ~C()
        {
            delete arr;
        }
    private:
        int arrSize;
        int *arr;
    };
     
    class B
    {
    public:
        C& getC()
        {
            C c(8);
            return c;
        }
    };
     
    C glob_C(8);
    D* glob_D = new D[8];
     
    class A
    {
      public:
       A()
       {
           B b;
           _c = b.getC();
       }
     
    D _d;
    C _c;
    };
     
    int main()
    {
        A a;
        return 0;
    }
    Les questions sont les suivantes:

    a/ Quelle est l'erreur qui a ete laissee dans le destructeur de la classe C?

    b/ La fonction getC entraine un probleme de memoire: expliquez pourquoi?

    c/ Le constructeur de la classe A entraine une erreur de compilation: expliquez pourquoi?

    d/ Identifiez tous les appels au constructeur par defaut de la classe D.
    Pour chacun des appels, notez :
    1/ la ligne d'ou se fait l'appel
    2/ combien d'appels sont executes?
    3/ Quand est execute l'appel (debut d'execution du programme, apres l'execution d'une methode precise, etc..)

    e/ Dans le code il y a une fuite de memoire: identifiez-la.

    f/ Pour cette question nous supposerons que les problemes des questions precedentes ont tous ete resolus.
    Pour chacun des objets: glob_C(31), b(38), arr(10) donner:
    - Endroit ou l'allocation de la memoire s'effectue (constructeur de telle classe, debut du programme...)
    - nom de l'objet (nom de la variable)
    - type de memoire allouee (heap/stack/global space)
    - endroit ou s'effectue la liberation de memoire (destructeur, fin d'execution du programme ...)

    Voila j'ai essaye tant que possible d'y repondre mais j'aimerais avoir les reponses de personnes plus experimentees pour etre bien sur.

    Merci d'avance a tous les courageux qui voudront bien m'aider!!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 17
    Par défaut
    Je precise que le plus complique pour moi est la derniere question... si vous pouviez m'aider ce serait vraiment genial!!!
    Thks

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    a) delete[], pas delete
    b) elle renvoie une référence vers une variable locale, ce qui est un comportement indéfini
    c) je vois pas, déjà j'ai un problème d'affichage pour ta classe A
    d) tu as un D alloué et construit au début du programme, un autre construit dans A.
    e) Tu ne libères pas ton D global, mais ce n'est pas vraiment une fuite.
    Après tu as aussi une copie de ton C, qui est bien entendu mauvaise, mais là ça produit pas de fuite particulière.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 17
    Par défaut
    Merci beaucoup loufoque ca concorde presque avec ce que j'avais trouve...
    Tu mas bien aide par contre sur deux questions!

    Maintenant je galere sur la derniere question lol je comprends pas tres bien comment ca se passe tu as une idee?
    Si tu n'as pas le temps laisse tomber je me debrouillerai autrement!

    Merci encore!!!

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    glob_C est de type C, dans la mémoire statique ("global space"), c'est-à-dire la mémoire qui fait partie de l'executable. Le constructeur sera appelé avant le main() et le destructeur après celui-ci.

    b est de type B, c'est une variable locale, donc allouée sur la mémoire automatique, c'est-à-dire la pile ("stack").
    Elle est allouée et construite au moment de sa déclaration et détruite et désallouée à la fin de la portée, c'est-à-dire ici à la fin de ta fonction.

    arr est de type int* et est un membre de la classe C. Il pointe vers le premier élément d'un tableau de taille k, tableau alloué dynamiquement sur la mémoire libre, c'est-à-dire le tas ("heap"), dans le constructeur de C. Ce tableau est ensuite libéré dans le destructeur de C.

  6. #6
    screetch
    Invité(e)
    Par défaut
    le contructeur de A echoue a la compilation car A contient un membre _c de type C, celui ci possede seulement deux constructeurs : un constructeur prenant un entier en parametre et le constructeur de copie qui a été généré de maniere automatique par le compilateur. Or, _c etant un membre de A il doit etre initialisé dans la liste d'initialisation du constructeur, sinon il sera initialisé avec le constructeur par défaut de C. Comme il n'existe pas de constructeur par défaut, _c ne peut pas etre initialisé.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 17
    Par défaut
    C'est excellent merci beaucoup les gars je pensais pas trouver autant d'aide ici j'ai tout compris grace a vous

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/05/2009, 11h08
  2. Réponses: 11
    Dernier message: 18/11/2007, 17h41
  3. question theorique sur java
    Par max25b dans le forum Langage
    Réponses: 13
    Dernier message: 18/05/2006, 14h53
  4. constructeur de recopie:question theorique
    Par voyageur dans le forum C++
    Réponses: 7
    Dernier message: 02/12/2004, 22h46
  5. question theorique
    Par discogarden dans le forum Développement
    Réponses: 4
    Dernier message: 29/01/2003, 17h05

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