 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
nico Guest
|
Posted: Thu Jun 23, 2005 11:34 am Post subject: Constructeur |
|
|
Bonjour,
Comment appeler le constructeur d'une classe ?
class A
{
public:
A();
~A();
};
A obj;
obj.A() //marche pas
obj.~A() //marche
Merci.
--
nico
|
|
| Back to top |
|
 |
Andre Heinen Guest
|
Posted: Thu Jun 23, 2005 11:51 am Post subject: Re: Constructeur |
|
|
On Thu, 23 Jun 2005 13:34:35 +0200, nico <nospam (AT) spam (DOT) fr> wrote:
| Quote: | Comment appeler le constructeur d'une classe ?
|
Il est appelé automatiquement lorsque tu crées une instance (mais ça
tu le savais déjà). Il n'est pas possible de l'appeler explicitement.
| Quote: | obj.A() //marche pas
|
Hé non... Mais au fait, que veux-tu faire?
Si ton but est de passer des arguments au constructeur d'une classe de
base ou d'un membre, procède comme ceci:
class A { // pour faire une base
public:
A(int);
};
class B { // pour faire un membre
public:
B(double);
};
class C: public A {
B b;
public:
C(int i, double d) : A(i), b(d) {}
};
Attention, appeler explicitement un destructeur est généralement une
erreur. N'oublie pas que le destructeur est appelé automatiquement
lors de la destruction de l'objet.
--
André Heinen
Mon e-mail, encodé ROT13: n qbg urvara ng rhebcrnayvax qbg pbz
La FAQ: http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
nico Guest
|
Posted: Thu Jun 23, 2005 2:49 pm Post subject: Re: Constructeur |
|
|
Salut,
| Quote: | Il est appelé automatiquement lorsque tu crées une instance (mais ça
tu le savais déjà). Il n'est pas possible de l'appeler explicitement.
obj.A() //marche pas
Hé non... Mais au fait, que veux-tu faire?
|
En fait c'était pour m'amuser un peu avec la mémoire (je voulais recreer mon
new, donc il me fallait appeller les constructeurs (en partant de la classe
de base etc...)) mais j'ai trouvé qu'on peut surcharger globalement les
opérateurs new et delete donc plus besoin Merci quand même.
--
nico
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Thu Jun 23, 2005 2:53 pm Post subject: Re: Constructeur |
|
|
nico <nospam (AT) spam (DOT) fr> writes:
| Quote: | Salut,
Il est appelé automatiquement lorsque tu crées une instance (mais ça
tu le savais déjà). Il n'est pas possible de l'appeler explicitement.
obj.A() //marche pas
Hé non... Mais au fait, que veux-tu faire?
En fait c'était pour m'amuser un peu avec la mémoire (je voulais recreer mon
new, donc il me fallait appeller les constructeurs (en partant de la classe
de base etc...)) mais j'ai trouvé qu'on peut surcharger globalement les
opérateurs new et delete donc plus besoin Merci quand même.
|
Pour ce genre de chose, il y a aussi le new avec placement:
void* rawptr = malloc(sizeof(A));
A* ptr = new (rawptr) A;
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
|
|
| Back to top |
|
 |
nico Guest
|
Posted: Thu Jun 23, 2005 3:03 pm Post subject: Re: Constructeur |
|
|
Jean-Marc Bourguet wrote:
| Quote: | nico <nospam (AT) spam (DOT) fr> writes:
Salut,
Il est appelé automatiquement lorsque tu crées une instance (mais ça
tu le savais déjà). Il n'est pas possible de l'appeler explicitement.
obj.A() //marche pas
Hé non... Mais au fait, que veux-tu faire?
En fait c'était pour m'amuser un peu avec la mémoire (je voulais recreer
mon new, donc il me fallait appeller les constructeurs (en partant de la
classe de base etc...)) mais j'ai trouvé qu'on peut surcharger
globalement les opérateurs new et delete donc plus besoin Merci quand
même.
Pour ce genre de chose, il y a aussi le new avec placement:
void* rawptr = malloc(sizeof(A));
A* ptr = new (rawptr) A;
|
Oui je n'ai vu qu'apres.
Merci.
--
nico
|
|
| Back to top |
|
 |
nico Guest
|
Posted: Thu Jun 23, 2005 3:11 pm Post subject: Re: Constructeur |
|
|
nico wrote:
| Quote: | Salut,
Il est appelé automatiquement lorsque tu crées une instance (mais ça
tu le savais déjà). Il n'est pas possible de l'appeler explicitement.
obj.A() //marche pas
Hé non... Mais au fait, que veux-tu faire?
En fait c'était pour m'amuser un peu avec la mémoire (je voulais recreer
mon new, donc il me fallait appeller les constructeurs (en partant de la
classe de base etc...)) mais j'ai trouvé qu'on peut surcharger globalement
les opérateurs new et delete donc plus besoin Merci quand même.
|
J'ai d'ailleurs un probleme :
Soit une classe A (d'une taille de 16o).
Et une classe B de base A (d'une taille de 24o).
A un moment je recupère les données repersentant B par un void*, je veux
désallouer alors pour ca je veux connaitre la taille, je fais sizeof(B) et
là bah j'ai la taille de A...
Est-ce possible de retrouver la taille de B ?
Ou dois-je changer de méthode (je pensais à stocker la taille des blocks
alloués) ?
--
nico
|
|
| Back to top |
|
 |
nico Guest
|
Posted: Thu Jun 23, 2005 3:13 pm Post subject: Re: Constructeur |
|
|
nico wrote:
| Quote: | nico wrote:
Salut,
Il est appelé automatiquement lorsque tu crées une instance (mais ça
tu le savais déjà). Il n'est pas possible de l'appeler explicitement.
obj.A() //marche pas
Hé non... Mais au fait, que veux-tu faire?
En fait c'était pour m'amuser un peu avec la mémoire (je voulais recreer
mon new, donc il me fallait appeller les constructeurs (en partant de la
classe de base etc...)) mais j'ai trouvé qu'on peut surcharger
globalement les opérateurs new et delete donc plus besoin Merci quand
même.
J'ai d'ailleurs un probleme :
Soit une classe A (d'une taille de 16o).
Et une classe B de base A (d'une taille de 24o).
A un moment je recupère les données repersentant B par un void*, je veux
désallouer alors pour ca je veux connaitre la taille, je fais sizeof(B) et
là bah j'ai la taille de A...
Est-ce possible de retrouver la taille de B ?
Ou dois-je changer de méthode (je pensais à stocker la taille des blocks
alloués) ?
|
en fait je pense que je vais changer de méthode :)
--
nico
|
|
| Back to top |
|
 |
Andre Heinen Guest
|
Posted: Thu Jun 23, 2005 3:19 pm Post subject: Re: Constructeur |
|
|
On Thu, 23 Jun 2005 17:03:29 +0200, nico <nospam (AT) spam (DOT) fr> wrote:
| Quote: | Jean-Marc Bourguet wrote:
Pour ce genre de chose, il y a aussi le new avec placement:
void* rawptr = malloc(sizeof(A));
A* ptr = new (rawptr) A;
Oui je n'ai vu qu'apres.
Merci.
|
Et, si je ne me trompe (je n'ai pas trop l'habitude de ce genre de
choses), il s'agit justement d'un des rares cas où tu peux avoir
besoin d'appeler un destructeur explicitement. Ne tiens donc pas trop
compte de mon avertissement de tout à l'heure à ce sujet.
Amuse-toi bien ;-)
--
André Heinen
Mon e-mail, encodé ROT13: n qbg urvara ng rhebcrnayvax qbg pbz
La FAQ: http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|