C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Constructeur

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
nico
Guest





PostPosted: Thu Jun 23, 2005 11:34 am    Post subject: Constructeur Reply with quote



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





PostPosted: Thu Jun 23, 2005 11:51 am    Post subject: Re: Constructeur Reply with quote



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) {}
};

Quote:
obj.~A() //marche

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





PostPosted: Thu Jun 23, 2005 2:49 pm    Post subject: Re: Constructeur Reply with quote



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 Smile Merci quand même.

--
nico

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Thu Jun 23, 2005 2:53 pm    Post subject: Re: Constructeur Reply with quote

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





PostPosted: Thu Jun 23, 2005 3:03 pm    Post subject: Re: Constructeur Reply with quote

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





PostPosted: Thu Jun 23, 2005 3:11 pm    Post subject: Re: Constructeur Reply with quote

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





PostPosted: Thu Jun 23, 2005 3:13 pm    Post subject: Re: Constructeur Reply with quote

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





PostPosted: Thu Jun 23, 2005 3:19 pm    Post subject: Re: Constructeur Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.