Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#1 12 Feb 2002 11:35:27

L@rk
Programmeur Graph100
Lieu: Saumur (49)
Date d'inscription: 30 Jan 2002
Messages: 742
Site web

Destructeurs de classe en C++ (TC3.0)

Voila, g 1 chti probleme.
Je vous balance le code, apres on en parle:
struct TypeBmp
{
    int hauteur;
    int largeur;
    int largeur_byte;

    byte *bitmap;
    byte bitmap2[8192];

    ~TypeBmp()
    {
        free(bitmap);
    }

    TypeBmp(char* path)
    {
        load_bmp(path);
    }

...
Et plus loin un appel explicite au destructeur:

fgp.~TypeBmp();

"fgp" étant une instance de TypeBmp (je précise aussi que fgp n'est pas un pointeur (donc le " . " se justifie).

Alors voila mon problème: la compilation de ce code sous TC3.00 génère un charmant message d'erreur "Member identifier expected", autrement dit, ~TypeBmp() n'est pas membre de TypeBmp (précision: struct <=> tt public dc pas de problème de restrictions d'accès).

Donc:
1) prévenez moi s'il y a (on ne sait jamais) une GROSSE connerie ds le code ce dessus que je n'aurais pas vu (ca m'arrive ... lol )
2) Si apparamment tt est correct, essayez de compiler chez vous (si vous avez TC3.00 un chti prog avec une classe (struct) et un destructeur.
Essayez d'appeler explicitement le destructeurs et communiquez moi les résultats.

Voila. Je vous remercie d'avance !!
;-)


L@rk @ FGPstudios

Hors ligne

 

#2 12 Feb 2002 13:17:29

2072
Programmeur Graph100
Lieu: Somewherebourg
Date d'inscription: 29 Jan 2002
Messages: 2056
Site web

Re: Destructeurs de classe en C++ (TC3.0)

désolé je m'y connaît pas bien du tout en langage objet, mais tu devrais avoir plusieurs compilateur installés, comme gcc par exemple (entièrement gratuit) un des meilleur !


-~2072~-
Paid Emails
[URL=http://www.2072productions.com]2072productions.com[/URL]
[URL=http://www.casiocalc.org]casiocalc.org[/URL]

Hors ligne

 

#3 13 Feb 2002 04:30:42

L@rk
Programmeur Graph100
Lieu: Saumur (49)
Date d'inscription: 30 Jan 2002
Messages: 742
Site web

Re: Destructeurs de classe en C++ (TC3.0)

Et whyp en pense quoi ?


L@rk @ FGPstudios

Hors ligne

 

#4 13 Feb 2002 14:49:54

Superna
Ex-Trouvetou G100
Lieu: Sous Linux ^^
Date d'inscription: 01 Feb 2002
Messages: 2275
Site web

Re: Destructeurs de classe en C++ (TC3.0)

Essai de modifier :
~TypeBmp()
{
free(bitmap);
}
en :
DestrBmp()
{
free(bitmap);
}

Peut être que le ~ veut dire autre chose qu'un caractere en C, non ?

Hors ligne

 

#5 13 Feb 2002 15:02:51

2072
Programmeur Graph100
Lieu: Somewherebourg
Date d'inscription: 29 Jan 2002
Messages: 2056
Site web

Re: Destructeurs de classe en C++ (TC3.0)

en effet le "~" est l'équivqlent de la commande "not"en asm (c'est le complément), par exemple : ~(01100010) == 10011101

@+


-~2072~-
Paid Emails
[URL=http://www.2072productions.com]2072productions.com[/URL]
[URL=http://www.casiocalc.org]casiocalc.org[/URL]

Hors ligne

 

#6 13 Feb 2002 15:24:05

Whyp
Programmeur Graph100
Date d'inscription: 05 Feb 2002
Messages: 319
Site web

Re: Destructeurs de classe en C++ (TC3.0)

moi je n'y connais rien en C++, mais je suis d'accord avec 2072, le tilde signifie bien not en C/C++
@+


http://shine.sourceforge.net tout programmer votre graph100 smile

Hors ligne

 

#7 14 Feb 2002 05:37:26

L@rk
Programmeur Graph100
Lieu: Saumur (49)
Date d'inscription: 30 Jan 2002
Messages: 742
Site web

Re: Destructeurs de classe en C++ (TC3.0)

le ~ signifie effectivement NOT (binaire) mais c'est aussi le préfixe qui identifie un destructeur de classe en C++.
Un destructeur se définit dans une classe sous cette forme:
~Nom_de_la_classe(parametres) { instructions;}
sans Void ni aucune valeur de retour.

Superna ton truc ca ne peut pas marcher étant donné que cela ne désallouerait que bitmap. Or un destructeur détruit TOUTE l'instance de la classe, autrement dit, tous les membres non dynamiques (c'est pourquoi le destructeur doit être explicite: il faut aussi désallouer les membres dynamiques sans quoi la mémoire se chargerait vite !!).

Je vous cite un extrait du Langage C++ paru chez Micro Application dans la collection Grand Livre :

De même que les constructeurs, les destructeurs peuvent s'appeler explicitement. [...] L'appel explicite d'un destructeur, à la différence d'un constructeur, doit contenir un objet ou un pointeur sur un objet. Autrement dit, pour une classe K, la forme sera : objet.~K() ou pointeur->~K() .

Donc finalement je ne suis pas bien avancé. Enfin bon je saurais me débrouiller sans ca: de toute facon, le destructeur est appelé implicitement lorsque l'objet sort de son domaine de validité.

Sinon une petite question à part:
Ca m'étonne que vous ne connaissiez pas le C++ ... Pourquoi ?
Moi, c simple, je ne peux plus m'en passer ! LEs programmes sont tellement plus organisés !
Et sinon, à la compilation, ya une différence de taille entre un prog en C et le même en C++ ou pas ?


L@rk @ FGPstudios

Hors ligne

 

#8 14 Feb 2002 06:39:37

Guest
Invité

Re: Destructeurs de classe en C++ (TC3.0)

C vrai que le c++ est l'evolution logique du C, mais la grande difference vient que c un langage objet. Il est plus lent que le C, et puis g appris le C en premier, alors comme je me consacre qu'a ma g100 opur l'instant, ben le C++ me sert pas a grand chose.
Mais je crois que mastermage a de bonne capacité en C++, tu devrai peut-etre le contacter.
Et oui et non, les progs sont pas forcement plus gros, mais si tu utilise des ft c++ alors que le C suffit, ben oui, c plus gros.
@+

 

#9 14 Feb 2002 09:40:29

L@rk
Programmeur Graph100
Lieu: Saumur (49)
Date d'inscription: 30 Jan 2002
Messages: 742
Site web

Re: Destructeurs de classe en C++ (TC3.0)

Que veux tu dire par la :

si tu utilise des ft c++ alors que le C suffit, ben oui, c plus gros

De tt facons, le C suffit toujours, tu px dans tous les cas écrire en C ce qui est écrit en C++ ! Seulement, le C++ ca clarifie. Tekken et MarioKart sont écrits en C++, et jeu peux te dire que j'abuse des classes sans modération ! Le C++ et la Graph100 ne sont pas du tout incompatibles !!

Enfin voila.
Donc je lance un appel à mastermage : lis ce thread et dis moi ce que tu pense de mon problème de destructeurs.

;-) @+


L@rk @ FGPstudios

Hors ligne

 

#10 14 Feb 2002 09:55:36

Whyp
Programmeur Graph100
Date d'inscription: 05 Feb 2002
Messages: 319
Site web

Re: Destructeurs de classe en C++ (TC3.0)

Je voulais cimplement dire que pour les truc simple, il vaut mieux utilisé du C. Mais il est clair que le C++ a de gros avantages, et tu fais bien de l'utilisé.
@+


http://shine.sourceforge.net tout programmer votre graph100 smile

Hors ligne

 

#11 14 Feb 2002 10:03:13

L@rk
Programmeur Graph100
Lieu: Saumur (49)
Date d'inscription: 30 Jan 2002
Messages: 742
Site web

Re: Destructeurs de classe en C++ (TC3.0)

Tout a fait d'accord mec ;-)

Mais les "trucs simples" de viennent tré vite compliqués.
P.ex pour gérer les bmp ds 1 prog: au lieu de créer 1 tableau de pointeurs et 1 autre tableau pour les largeurs, longueurs, etc ... , bin tu crée 1 classe qui contient tt ca avec en + tt les fonctions de gestion (ouverture, fermeture, affichage, etc...) et hop! c simplifié et bcp + pratique à utiliser.

Enfin c mon avis ... ;-)

En tt cas côté optimisation en taille, je suis rassuré: je peux programmer en C++ abusément (ca se dit lol ?)


L@rk @ FGPstudios

Hors ligne

 

#12 14 Feb 2002 15:05:35

2072
Programmeur Graph100
Lieu: Somewherebourg
Date d'inscription: 29 Jan 2002
Messages: 2056
Site web

Re: Destructeurs de classe en C++ (TC3.0)

À propos de la taille, vous avez remarqué que Tekken faisait plus de 60 Ko ? et qu'il fonctionnait quand même !


-~2072~-
Paid Emails
[URL=http://www.2072productions.com]2072productions.com[/URL]
[URL=http://www.casiocalc.org]casiocalc.org[/URL]

Hors ligne

 

#13 15 Feb 2002 05:45:38

L@rk
Programmeur Graph100
Lieu: Saumur (49)
Date d'inscription: 30 Jan 2002
Messages: 742
Site web

Re: Destructeurs de classe en C++ (TC3.0)

Je viens de vérifier: Tekken 1.1 fait 51.3 Ko .
Ou est-ce que ta vu qu'il faisait 60 2072 ?


L@rk @ FGPstudios

Hors ligne

 

#14 15 Feb 2002 16:34:53

2072
Programmeur Graph100
Lieu: Somewherebourg
Date d'inscription: 29 Jan 2002
Messages: 2056
Site web

Re: Destructeurs de classe en C++ (TC3.0)

ba la version que j'ai fait 64 242 !!! et je pense pas qu'il y ait que de (char)0 à la fin (j'avais vérifié).


-~2072~-
Paid Emails
[URL=http://www.2072productions.com]2072productions.com[/URL]
[URL=http://www.casiocalc.org]casiocalc.org[/URL]

Hors ligne

 

#15 16 Feb 2002 09:50:20

L@rk
Programmeur Graph100
Lieu: Saumur (49)
Date d'inscription: 30 Jan 2002
Messages: 742
Site web

Re: Destructeurs de classe en C++ (TC3.0)

c'est plus que curieux ca ...
Je me demande ou tu l'a téléchargé ...


L@rk @ FGPstudios

Hors ligne

 

#16 03 May 2002 23:53:34

Guest
Invité

Re: Destructeurs de classe en C++ (TC3.0)

En fait tas jamais besoin dappeller explicitement un destructeur, je mexplike:
Tauras jamais a faire ce ke tas fait c a dire:   fgp.~BMP
en fait kan tu crees un Destructeur c juste pour dire au programme que lorske la variable fgp (structure ds ce cas) doit etre detruite, voila comment on la detruit (utile ds le cas ou tas alloué de la mémoire dans la construction de l'objet),
si tu declare pas le destructeur, bein meme en kittant le programme lespace alloué pour ta variable sera toujours occupé et ta Ram sera utilisée inutilement.

En résumé: tas pas besoin de faire cet appel explicite.

Jespere avoir été clair L@rk !!


@+

y@ss

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr