Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Andre Heinen
On Thu, 23 Jun 2005 13:34:35 +0200, nico wrote:
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.
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) {} };
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/
On Thu, 23 Jun 2005 13:34:35 +0200, nico <nospam@spam.fr> wrote:
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.
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) {}
};
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/
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?
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) {} };
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/
nico
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.
-- nico
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.
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
Jean-Marc Bourguet
nico 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;
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
nico <nospam@spam.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;
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
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
nico
Jean-Marc Bourguet wrote:
nico 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
Jean-Marc Bourguet wrote:
nico <nospam@spam.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;
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
nico
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) ?
-- nico
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) ?
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
nico
nico wrote:
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
nico wrote:
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 :)
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
Andre Heinen
On Thu, 23 Jun 2005 17:03:29 +0200, nico wrote:
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/
On Thu, 23 Jun 2005 17:03:29 +0200, nico <nospam@spam.fr> wrote:
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/
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/