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 

Constructor et vector par defaut
Goto page 1, 2, 3, 4  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
korchkidu
Guest





PostPosted: Tue Jan 04, 2005 12:29 pm    Post subject: Constructor et vector par defaut Reply with quote



Bonjour,

j'ai une classe dont les objets peuvent etre construits en specifiant ou
non le dernier parametre qui est un std::vector. J'avais donc simplement
utilise un parametre par defaut qui mettait le vector vide s'il n'etait
pas initialise. Mais dernierement, on me dit (avec des explications
fumeuses que je n'ai pas comprises...) qu'il fallait pas faire ca. Je me
retrouve donc a faire 2 constructeurs appelant une fonction init. Celui
qui n'a pas le parametre associe au vector le cree simplement (vide) et
appelle la fonction init. Je trouve ca plus que douteux comme solution.
Alors pourquoi la premiere solution n'etait pas correcte?

Merci d'avance,
K.
Back to top
Fabien LE LEZ
Guest





PostPosted: Tue Jan 04, 2005 12:32 pm    Post subject: Re: Constructor et vector par defaut Reply with quote



On Tue, 04 Jan 2005 13:29:38 +0100, korchkidu <korch_ki_du (AT) yahoo (DOT) fr>:

Quote:
J'avais donc simplement
utilise un parametre par defaut qui mettait le vector vide s'il n'etait
pas initialise. Mais dernierement, on me dit (avec des explications
fumeuses que je n'ai pas comprises...) qu'il fallait pas faire ca.

Ah ? Je veux bien voir les explications en question.
Personnellement, la construction suivante ne m'a jamais gêné :

class C
{
public:
C (int i, std::vector<double> v= std::vector<double>());
};



--
;-)

Back to top
Fabien LE LEZ
Guest





PostPosted: Tue Jan 04, 2005 12:32 pm    Post subject: Re: Constructor et vector par defaut Reply with quote



On Tue, 04 Jan 2005 13:29:38 +0100, korchkidu <korch_ki_du (AT) yahoo (DOT) fr>:

Quote:
J'avais donc simplement
utilise un parametre par defaut qui mettait le vector vide s'il n'etait
pas initialise. Mais dernierement, on me dit (avec des explications
fumeuses que je n'ai pas comprises...) qu'il fallait pas faire ca.

Ah ? Je veux bien voir les explications en question.
Personnellement, la construction suivante ne m'a jamais gêné :

class C
{
public:
C (int i, std::vector<double> const& v= std::vector<double>());
};



--
;-)

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Jan 04, 2005 12:43 pm    Post subject: Re: Constructor et vector par defaut Reply with quote

korchkidu <korch_ki_du (AT) yahoo (DOT) fr> writes:

Quote:
j'ai une classe dont les objets peuvent etre construits en
specifiant ou non le dernier parametre qui est un
std::vector. J'avais donc simplement utilise un parametre par defaut
qui mettait le vector vide s'il n'etait pas initialise. Mais
dernierement, on me dit (avec des explications fumeuses que je n'ai
pas comprises...) qu'il fallait pas faire ca. Je me retrouve donc a
faire 2 constructeurs appelant une fonction init. Celui qui n'a pas
le parametre associe au vector le cree simplement (vide) et appelle
la fonction init. Je trouve ca plus que douteux comme
solution. Alors pourquoi la premiere solution n'etait pas correcte?

La seule raison que je vois de preferer la surcharge aux parametres
avec des valeurs par defaut (mais je n'ai pas reflechi longtemps a la
question), c'est la possibilite de prendre des pointeurs vers
fonctions vers toutes les signatures. Cette raison n'est pas valable
pour les constructeurs pour lesquels a priori j'utiliserais des
parametre ayant des valeurs par defaut sans etats d'ame.

Sans connaitre les raisons qui t'ont ete donnees (etaient elles
generiques ou propres au cas en presence?), c'est difficile de
commenter plus.

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
Marc Boyer
Guest





PostPosted: Tue Jan 04, 2005 2:15 pm    Post subject: Re: Constructor et vector par defaut Reply with quote

In article <pxbllb99xfl.fsf (AT) news (DOT) bourguet.org>, Jean-Marc Bourguet wrote:
Quote:
korchkidu <korch_ki_du (AT) yahoo (DOT) fr> writes:

j'ai une classe dont les objets peuvent etre construits en
specifiant ou non le dernier parametre qui est un
std::vector. J'avais donc simplement utilise un parametre par defaut
qui mettait le vector vide s'il n'etait pas initialise. Mais
dernierement, on me dit (avec des explications fumeuses que je n'ai
pas comprises...) qu'il fallait pas faire ca. Je me retrouve donc a
faire 2 constructeurs appelant une fonction init. Celui qui n'a pas
le parametre associe au vector le cree simplement (vide) et appelle
la fonction init. Je trouve ca plus que douteux comme
solution. Alors pourquoi la premiere solution n'etait pas correcte?

La seule raison que je vois de preferer la surcharge aux parametres
avec des valeurs par defaut (mais je n'ai pas reflechi longtemps a la
question), c'est la possibilite de prendre des pointeurs vers
fonctions vers toutes les signatures. Cette raison n'est pas valable
pour les constructeurs pour lesquels a priori j'utiliserais des
parametre ayant des valeurs par defaut sans etats d'ame.

C'est à dire qu'on ne peut pas faire:
void foo(int i, double d=0);
typedef (*fun_i)(int);
typedef (*fun_i_d)(int,double);

fun_i fi= foo;
fun_i_di fid= foo;

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Jan 04, 2005 2:23 pm    Post subject: Re: Constructor et vector par defaut Reply with quote

Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr.invalid> writes:

Quote:
La seule raison que je vois de preferer la surcharge aux parametres
avec des valeurs par defaut (mais je n'ai pas reflechi longtemps a la
question), c'est la possibilite de prendre des pointeurs vers
fonctions vers toutes les signatures. Cette raison n'est pas valable
pour les constructeurs pour lesquels a priori j'utiliserais des
parametre ayant des valeurs par defaut sans etats d'ame.

C'est à dire qu'on ne peut pas faire:
void foo(int i, double d=0);
typedef (*fun_i)(int);
typedef (*fun_i_d)(int,double);

fun_i fi= foo;
fun_i_di fid= foo;

Exact.

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
korchkidu
Guest





PostPosted: Tue Jan 04, 2005 5:19 pm    Post subject: Re: Constructor et vector par defaut Reply with quote

Fabien LE LEZ wrote:
Quote:
On Tue, 04 Jan 2005 13:29:38 +0100, korchkidu <korch_ki_du (AT) yahoo (DOT) fr>:


J'avais donc simplement
utilise un parametre par defaut qui mettait le vector vide s'il n'etait
pas initialise. Mais dernierement, on me dit (avec des explications
fumeuses que je n'ai pas comprises...) qu'il fallait pas faire ca.


Ah ? Je veux bien voir les explications en question.

Apres avoir redemande a la personne en question, le vector serait cree
sur la pile ce qui pourrait causer des problemes lors de la destruction
(lorsque la fonction retourne)...C'est pas plus clair que ca...

Le mot de la fin etant "This is definitely not a good way how to
ensure that something is initialized.
".

K.

Back to top
korchkidu
Guest





PostPosted: Tue Jan 04, 2005 5:21 pm    Post subject: Re: Constructor et vector par defaut Reply with quote

Marc Boyer wrote:

Quote:
In article <pxbllb99xfl.fsf (AT) news (DOT) bourguet.org>, Jean-Marc Bourguet wrote:

korchkidu <korch_ki_du (AT) yahoo (DOT) fr> writes:


j'ai une classe dont les objets peuvent etre construits en
specifiant ou non le dernier parametre qui est un
std::vector. J'avais donc simplement utilise un parametre par defaut
qui mettait le vector vide s'il n'etait pas initialise. Mais
dernierement, on me dit (avec des explications fumeuses que je n'ai
pas comprises...) qu'il fallait pas faire ca. Je me retrouve donc a
faire 2 constructeurs appelant une fonction init. Celui qui n'a pas
le parametre associe au vector le cree simplement (vide) et appelle
la fonction init. Je trouve ca plus que douteux comme
solution. Alors pourquoi la premiere solution n'etait pas correcte?

La seule raison que je vois de preferer la surcharge aux parametres
avec des valeurs par defaut (mais je n'ai pas reflechi longtemps a la
question), c'est la possibilite de prendre des pointeurs vers
fonctions vers toutes les signatures. Cette raison n'est pas valable
pour les constructeurs pour lesquels a priori j'utiliserais des
parametre ayant des valeurs par defaut sans etats d'ame.


C'est à dire qu'on ne peut pas faire:
void foo(int i, double d=0);
typedef (*fun_i)(int);
typedef (*fun_i_d)(int,double);

fun_i fi= foo;
fun_i_di fid= foo;

Donc en restant dans le cas des objets, ca devrait marcher si je
comprends bien...

Merci pour toutes vos reponses,
K.

Back to top
drkm
Guest





PostPosted: Tue Jan 04, 2005 5:41 pm    Post subject: Re: Constructor et vector par defaut Reply with quote

korchkidu <korch_ki_du (AT) yahoo (DOT) fr> writes:

Quote:
Marc Boyer wrote:

C'est à dire qu'on ne peut pas faire:
void foo(int i, double d=0);
typedef (*fun_i)(int);
typedef (*fun_i_d)(int,double);
fun_i fi= foo;
fun_i_di fid= foo;

Donc en restant dans le cas des objets, ca devrait marcher si je
comprends bien...

Je ne comprend pas ce que tu veux dire ...

--drkm

Back to top
drkm
Guest





PostPosted: Tue Jan 04, 2005 5:48 pm    Post subject: Re: Constructor et vector par defaut Reply with quote

korchkidu <korch_ki_du (AT) yahoo (DOT) fr> writes:

Quote:
Fabien LE LEZ wrote:

On Tue, 04 Jan 2005 13:29:38 +0100, korchkidu <korch_ki_du (AT) yahoo (DOT) fr>:

J'avais donc simplement utilise un parametre par defaut qui mettait
le vector vide s'il n'etait pas initialise. Mais dernierement, on
me dit (avec des explications fumeuses que je n'ai pas
comprises...) qu'il fallait pas faire ca.

Ah ? Je veux bien voir les explications en question.

Apres avoir redemande a la personne en question, le vector serait cree
sur la pile ce qui pourrait causer des problemes lors de la destruction
(lorsque la fonction retourne)...C'est pas plus clair que ca...

Mais de quels problèmes parle-t-elle ?

Quote:
Le mot de la fin etant "This is definitely not a good way how to
ensure that something is initialized.
".

Cette personne serait-elle intéressée à partager son point de vue ?
J'avoue ne toujours pas voir de quels problèmes elle parle.

--drkm

Back to top
Fabien LE LEZ
Guest





PostPosted: Tue Jan 04, 2005 7:12 pm    Post subject: Re: Constructor et vector par defaut Reply with quote

On Tue, 04 Jan 2005 18:19:36 +0100, korchkidu <korch_ki_du (AT) yahoo (DOT) fr>:

Quote:
Apres avoir redemande a la personne en question, le vector serait cree
sur la pile ce qui pourrait causer des problemes lors de la destruction
(lorsque la fonction retourne)...C'est pas plus clair que ca...

Mouais... Rien de bien convaincant, en tout cas.
Je te rassure, C++ gère parfaitement bien ce cas.


--
;-)

Back to top
James Kanze
Guest





PostPosted: Tue Jan 04, 2005 8:32 pm    Post subject: Re: Constructor et vector par defaut Reply with quote

korchkidu wrote:
Quote:
Fabien LE LEZ wrote:

On Tue, 04 Jan 2005 13:29:38 +0100, korchkidu <korch_ki_du (AT) yahoo (DOT) fr>:

J'avais donc simplement utilise un parametre par defaut qui
mettait le vector vide s'il n'etait pas initialise. Mais
dernierement, on me dit (avec des explications fumeuses que
je n'ai pas comprises...) qu'il fallait pas faire ca.

Ah ? Je veux bien voir les explications en question.

Apres avoir redemande a la personne en question, le vector
serait cree sur la pile ce qui pourrait causer des problemes
lors de la destruction (lorsque la fonction retourne)...C'est
pas plus clair que ca...

La question alors est : qu'est-ce que tu fais avec ce vector
dans ton constructeur ? Parce qu'il serait bien détruit à la fin
de l'expression qui invoque le constructeur. Alors, si tu en as
fait une copie, aucun problème. Sinon, il risque d'avoir des
problèmes dans tous les cas, même quand tu te sers pas de la
valeur par défaut.

Quote:
Le mot de la fin etant "This is definitely not a good way how
to ensure that something is initialized."

Ce n'est pas une bonne solution pour initialiser une référence
ou un pointeur dans l'objet, c'est sûr. Mais si tu copies le
vector, il ne doit pas y avoir de problèmes.

--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34

Back to top
drkm
Guest





PostPosted: Tue Jan 04, 2005 10:10 pm    Post subject: Re: Constructor et vector par defaut Reply with quote

James Kanze <kanze@none> writes:

Quote:
korchkidu wrote:

Le mot de la fin etant "This is definitely not a good way how
to ensure that something is initialized."

Ce n'est pas une bonne solution pour initialiser une référence
ou un pointeur dans l'objet, c'est sûr.

Prendre l'adresse d'un objet passé par référence constante (et le
stocker pour après la fin de la fonction), c'est vicieux. Et si ce
paramètre a de plus une valeur par défaut ...

Mais ce n'est alors pas le fait d'avoir une valeur par défaut à
mettre en cause, ÀMHA, mais le passage par référence plutôt que d'un
pointeur.

--drkm

Back to top
Vladimir Votiakov
Guest





PostPosted: Tue Jan 04, 2005 10:47 pm    Post subject: Re: Constructor et vector par defaut Reply with quote

J'ai envie d'appeler ce genre de code de l'abus de intelligence
de compilateur.

A quoi ça sert de créer un objet sur stack pour le balancer aussitôt ?

A mon avis, il est plus logique d'avoir 2 constructeurs
sans paramètre et avec le paramètre et si tu veut
partager du code entre les deux, une petite fonction
(inline) initialize(), par exemple.


"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> wrote

Quote:
On Tue, 04 Jan 2005 13:29:38 +0100, korchkidu <korch_ki_du (AT) yahoo (DOT) fr>:

J'avais donc simplement
utilise un parametre par defaut qui mettait le vector vide s'il n'etait
pas initialise. Mais dernierement, on me dit (avec des explications
fumeuses que je n'ai pas comprises...) qu'il fallait pas faire ca.

Ah ? Je veux bien voir les explications en question.
Personnellement, la construction suivante ne m'a jamais gêné :

class C
{
public:
C (int i, std::vector<double> const& v= std::vector<double>());
};



--
Wink



Back to top
drkm
Guest





PostPosted: Tue Jan 04, 2005 11:57 pm    Post subject: Re: Constructor et vector par defaut Reply with quote

"Vladimir Votiakov" <vvot.2004XXX (AT) 9online (DOT) fr> writes:

Quote:
J'ai envie d'appeler ce genre de code de l'abus de intelligence
de compilateur.

Que vient faire ici l'intelligence du compilateur ?

Quote:
A quoi ça sert de créer un objet sur stack pour le balancer aussitôt ?

Tout dépend de ce que l'on appelle « aussitôt ». Le temps
d'exécution d'une fonction ne me semble pas un grain trop fin.

Quote:
A mon avis, il est plus logique d'avoir 2 constructeurs
sans paramètre et avec le paramètre et si tu veut
partager du code entre les deux, une petite fonction
(inline) initialize(), par exemple.

Dans le cas présent, je ne vois pas l'utilité. Ça me semblerait
presque de l'obfuscation, dans le cas présent. On parle bien de
quelque chose comme :

void f( T const & t = T() ) {
// ...
}

vs. :

void f() {
T t ;
init( t ) ;
}

void f( T const & t ) {
init( t ) ;
}

void init( T const & t ) {
// ...
}

?

--drkm

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2, 3, 4  Next
Page 1 of 4

 
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.