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++Builder Discussion :

Initialisation à Zéro d'Objet C++


Sujet :

C++Builder

  1. #1
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut Initialisation à Zéro d'Objet C++
    Je débute en C++, j'ai donc commencé par le Début, aujourd'hui, j'en suis au Constructeur !
    J'ai l'habitude de Delphi, rien que le comportement des Constructeurs et de l'Héritage c'est très différent !

    J'ai remarqué que mes Objets C++ (Déclaration Statique ou Allocation Dynamique) comportaient des valeurs aléatoires

    Mes Objets C++ hérités de TObject sont tout propre, tout est à zéro (merci InitInstance)

    Existe-t-il une option pour qu'un Objet C++ soit tout à zéro sans devoir tout écrire dans le constructeurs ou par une série d'initialization var1(value1), var2(value2) ...
    Ou une méthode barbare avec ZeroMemory ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    tout écrire dans le constructeurs ou par une série d'initialization var1(value1), var2(value2) ...
    Toujours fait comme ça....

  3. #3
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Oui, il me semble que c'est la seul manière
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Désolé, je remonte ce sujet déjà résolu, juste pour apporter une précision à laquelle je n'avais pas fait attention avant sur le constructeur et le "zero init"

    Pour la class CClassWithDefaultConstruct, tout est à zéro si l'on appel le constructeur explicitement (allocation statique ou dynamique)
    Les valeurs "aléatoires" ne sont que dans le cas d'une allocation statique simple

    Pour la class CClassWithEmptyConstruct
    On obtient bien ce qui la FAQ Quand dois-je définir un constructeur par défaut ?
    Pour les types POD, les valeurs sont laissées non initialisées.
    Peu importe la façon de déclarer, c'est toujours "aléatoires" !!!

    N'est pas idiot !
    On devrait pouvoir appeler de son constructeur un zéro init comme le fait le constructeur par défaut sans devoir se taper
    CClassWithFullConstruct() : A(0), B(0), C(0), D(0) {}
    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
    //---------------------------------------------------------------------------
    class CClassWithDefaultConstruct
    {
    public:
      int A;
      double B;
      int C;
      int D;
    };
    //---------------------------------------------------------------------------
    class CClassWithEmptyConstruct
    {
    public:
      int A;
      double B;
      int C;
      int D;
     
      CClassWithEmptyConstruct() {}
    };
    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
      CClassWithDefaultConstruct A3;
      CClassWithDefaultConstruct B3;
      A3.A = 1;
      A3.B = 2.3;
      A3.C = 4;
      A3.D = 5;
      B3 = A3;
      A3.A = 6;
      MemoTrace->Lines->Add(AnsiString().sprintf("%d %f %d %d", A3.A, A3.B, A3.C, A3.D));
      MemoTrace->Lines->Add(AnsiString().sprintf("%d %f %d %d", B3.A, B3.B, B3.C, B3.D));
      CClassWithDefaultConstruct C3; // Aléatoire 
      MemoTrace->Lines->Add(AnsiString().sprintf("%d %f %d %d", C3.A, C3.B, C3.C, C3.D));
      CClassWithDefaultConstruct D3 = CClassWithDefaultConstruct(); // Zero Init !
      MemoTrace->Lines->Add(AnsiString().sprintf("%d %f %d %d", D3.A, D3.B, D3.C, D3.D));
      CClassWithDefaultConstruct *E3 = new CClassWithDefaultConstruct(); // Zero Init !
      MemoTrace->Lines->Add(AnsiString().sprintf("%d %f %d %d", E3->A, E3->B, E3->C, E3->D));
      delete E3;
      MemoTrace->Lines->Add("");
     
      CClassWithEmptyConstruct A4;
      CClassWithEmptyConstruct B4;
      A4.A = 1;
      A4.B = 2.3;
      A4.C = 4;
      A4.D = 5;
      B4 = A4;
      A4.A = 6;
      MemoTrace->Lines->Add(AnsiString().sprintf("%d %f %d %d", A4.A, A4.B, A4.C, A4.D));
      MemoTrace->Lines->Add(AnsiString().sprintf("%d %f %d %d", B4.A, B4.B, B4.C, B4.D));
      CClassWithEmptyConstruct C4; // Aléatoire 
      MemoTrace->Lines->Add(AnsiString().sprintf("%d %f %d %d", C4.A, C4.B, C4.C, C4.D));
      CClassWithEmptyConstruct D4 = CClassWithEmptyConstruct(); // Aléatoire 
      MemoTrace->Lines->Add(AnsiString().sprintf("%d %f %d %d", D4.A, D4.B, D4.C, D4.D));
      CClassWithEmptyConstruct *E4 = new CClassWithEmptyConstruct(); // Aléatoire 
      MemoTrace->Lines->Add(AnsiString().sprintf("%d %f %d %d", E4->A, E4->B, E4->C, E4->D));
      delete E4;
      MemoTrace->Lines->Add("");
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Initialisation d'un objet à partir d'une session
    Par Tony_ducrocq dans le forum Langage
    Réponses: 2
    Dernier message: 11/05/2009, 14h50
  2. Réponses: 7
    Dernier message: 31/03/2009, 17h39
  3. Réponses: 1
    Dernier message: 16/08/2007, 18h34
  4. Initialiser un membre (objet) static
    Par Chop_chop dans le forum C++
    Réponses: 2
    Dernier message: 14/05/2007, 15h08
  5. Code Initialisation d'un objet COM (TAutoObject)
    Par desperado dans le forum Delphi
    Réponses: 1
    Dernier message: 14/11/2006, 11h14

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