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++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  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�.

+ 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