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
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 053
    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 émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    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
    Expert confirmé

    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 : 40
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Oui, il me semble que c'est la seul manière

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 053
    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