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 

Probleme sur un constructeur avec un parametre par defaut
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
giova
Guest





PostPosted: Fri May 21, 2004 12:28 pm    Post subject: Probleme sur un constructeur avec un parametre par defaut Reply with quote



bonjour

j'ai une classe Test avec (disons) un simple constructeur :

Test(int num=1)
{
cout<<"construceur : "< }

ensuite j'ai ceci dans mon main :

Test tata; //erreur a la compilation
Test toto();
Test titi(5);

Bon pour le probleme de tata je pense avoir compris : en créant le
constructeur a un parametre, on perd le constructeur par defaut, oui
mais c'est quand meme bizare, je vais y venir.

Mon probleme est que la ligne Test toto(); semble ne pas etre éxécutée.

j'utilise VC 2003 et lorsque je débug apres avoir placé un point d'arret
sur Test toto(); le programme se met en pause sur l'instruction
suivante, comme si Test toto(); ne comprennait aucune instruction.
j'ai égallement placé un point d'arret a l'interieur du constructeur,
pour etre sur de savoir quand il est lancé, or, seul Test titi(5) semble
l'appeller.
et pour finir dans le debuggeur "variable locales" seul titi apparait.

alors je ne comprends pas pourquoi Test toto() n'appelle pas le
constructeur avec un parametre par defaut ???
pourquoi la ligne semble ignorée sans qu'on m'avertisse de quoi que ce
soit lors la compil ou lors du debuggage? Je veux dire, soit le
compilateur me jete, soit le programme plante, soit il me construit
toto, mais la vraiment j'ai rien !!!

idem pour Test tata; pourquoi ne peut on pas "traduire" cette ligne par
Test tata(int num=1) soit => Test tata(1); ???

merci d'avance pour les lumieres que vous allez m'apporter.
Back to top
Jean-Marc Bourguet
Guest





PostPosted: Fri May 21, 2004 12:38 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote



giova <pas (AT) de (DOT) mail> writes:

Quote:
bonjour

j'ai une classe Test avec (disons) un simple constructeur :

Test(int num=1)
{
cout<<"construceur : "< }

ensuite j'ai ceci dans mon main :

Test tata; //erreur a la compilation
Test toto();
Test titi(5);

Tu peux donner un Exemple Compilable et Minimum? (non, on n'est pas
dans fctt mais c'est quand meme valable partout.)

Quote:
Bon pour le probleme de tata je pense avoir compris : en créant le
constructeur a un parametre, on perd le constructeur par defaut, oui mais
c'est quand meme bizare, je vais y venir.

Mon probleme est que la ligne Test toto(); semble ne pas etre
éxécutée.

Ca devrait etre dans la FAQ... C'est une declaration pour une fonction
nommee toto sans parametres qui retourne un Test. Il y a des cas
encore plus piegeux de cette regle ou la fonction declaree peut
prendre des parametres.

Quote:
idem pour Test tata; pourquoi ne peut on pas "traduire" cette ligne par
Test tata(int num=1) soit => Test tata(1); ???

class Test
{
public:
Test(int num);
};

Test::Test(int num = 1) {
}

void f() {
Test tata;
}

Compile chez moi sans probleme. On commence donc les devinettes, tu
n'est pas dans le fichier qui contient l'implementation et donc
l'argument par defaut n'est pas vu.

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
Fabien LE LEZ
Guest





PostPosted: Fri May 21, 2004 12:41 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote



On Fri, 21 May 2004 14:28:28 +0200, giova <pas (AT) de (DOT) mail> wrote:

Quote:
j'ai une classe Test avec (disons) un simple constructeur :

Test(int num=1)
{
cout<<"construceur : "< }

ensuite j'ai ceci dans mon main :

Test tata; //erreur a la compilation

Ça, c'est bizarre.

Avec le code suivant il ne devrait pas y avoir de problème :

class Test
{
public:
Test (int num= 1)
{
cout<<"constructeur : "< }
};

Assure-toi d'avoir déclaré la valeur par défaut dans la définition de
la classe.
Ce code, par exemple, ne convient pas :

class Test
{
public: Test (int num);
}

Test::Test (int num=1)
{
cout<<"constructeur : "< }

Quote:
Test toto();

Ceci est une déclaration de fonction, rien à voir avec la création
d'un objet.


--
Wink
FLL, Epagneul Breton

Back to top
Patrick Mézard
Guest





PostPosted: Fri May 21, 2004 12:46 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote

giova wrote:

Quote:
bonjour

j'ai une classe Test avec (disons) un simple constructeur :

Test(int num=1)
{
cout<<"construceur : "< }

ensuite j'ai ceci dans mon main :

Test tata; //erreur a la compilation
Test toto();
Test titi(5);

Bon pour le probleme de tata je pense avoir compris : en créant le
constructeur a un parametre, on perd le constructeur par defaut, oui
mais c'est quand meme bizare, je vais y venir.

Le code suivant marche très bien (VC 7.1) :

#include
class Test
{
public:
Test(int t = 1) : t_(t)
{
std::cout< }

private:
int t_;
};

int main()
{
Test t1;
Test t2(2);
}

et affiche :

***
constructeur : 1
constructeur : 2
***

Je ne comprends pas l'erreur de compilation de ta première ligne. Ca
vient sans doute du reste du code. Quant à la deuxième ligne, c'est une
erreur classique et pas évidente au premier abord :

Test toto();

est analysée comme une déclaration de fonction (paramètre void, retourne
Test). D'ailleurs le compilateur le dit, le bougre (warning level=4).

Patrick Mézard

Back to top
giova
Guest





PostPosted: Fri May 21, 2004 12:47 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote

Fabien LE LEZ wrote:

Quote:
On Fri, 21 May 2004 14:28:28 +0200, giova <pas (AT) de (DOT) mail> wrote:


j'ai une classe Test avec (disons) un simple constructeur :

Test(int num=1)
{
cout<<"construceur : "< }

ensuite j'ai ceci dans mon main :

Test tata; //erreur a la compilation


Ça, c'est bizarre.

Avec le code suivant il ne devrait pas y avoir de problème :

class Test
{
public:
Test (int num= 1)
{
cout<<"constructeur : "< }
};

Assure-toi d'avoir déclaré la valeur par défaut dans la définition de
la classe.
Ce code, par exemple, ne convient pas :

class Test
{
public: Test (int num);
}

Test::Test (int num=1)
{
cout<<"constructeur : "< }

héhé c'est exactement ce que j'avais fait Smile
Quote:


Test toto();


Ceci est une déclaration de fonction, rien à voir avec la création
d'un objet.



tu veux dire que c'est intéprété comme etant un prototype plutot non?

Back to top
Fabien LE LEZ
Guest





PostPosted: Fri May 21, 2004 12:47 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote

On 21 May 2004 14:38:14 +0200, Jean-Marc Bourguet <jm (AT) bourguet (DOT) org>
wrote:

Quote:
Il y a des cas
encore plus piegeux de cette regle ou la fonction declaree peut
prendre des parametres.

Heureusement, sinon on s'ennuierait ! Wink
--
Wink
FLL, Epagneul Breton

Back to top
Fabien LE LEZ
Guest





PostPosted: Fri May 21, 2004 12:48 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote

On Fri, 21 May 2004 14:47:17 +0200, giova <pas (AT) de (DOT) mail> wrote:

Quote:
Ceci est une déclaration de fonction, rien à voir avec la création
d'un objet.

tu veux dire que c'est intéprété comme etant un prototype plutot non?

C'est bien ce que j'ai dit.
--
Wink
FLL, Epagneul Breton

Back to top
giova
Guest





PostPosted: Fri May 21, 2004 12:52 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote

Jean-Marc Bourguet wrote:

Quote:
giova <pas (AT) de (DOT) mail> writes:


bonjour

j'ai une classe Test avec (disons) un simple constructeur :

Test(int num=1)
{
cout<<"construceur : "< }

ensuite j'ai ceci dans mon main :

Test tata; //erreur a la compilation
Test toto();
Test titi(5);


Tu peux donner un Exemple Compilable et Minimum? (non, on n'est pas
dans fctt mais c'est quand meme valable partout.)


Bon pour le probleme de tata je pense avoir compris : en créant le
constructeur a un parametre, on perd le constructeur par defaut, oui mais
c'est quand meme bizare, je vais y venir.

Mon probleme est que la ligne Test toto(); semble ne pas etre
éxécutée.


Ca devrait etre dans la FAQ... C'est une declaration pour une fonction
nommee toto sans parametres qui retourne un Test. Il y a des cas
encore plus piegeux de cette regle ou la fonction declaree peut
prendre des parametres.


idem pour Test tata; pourquoi ne peut on pas "traduire" cette ligne par
Test tata(int num=1) soit => Test tata(1); ???


class Test
{
public:
Test(int num);
};

Test::Test(int num = 1) {
}

void f() {
Test tata;
}

Compile chez moi sans probleme. On commence donc les devinettes, tu
n'est pas dans le fichier qui contient l'implementation et donc
l'argument par defaut n'est pas vu.

A+

donc si je comprends bien, pour déclarer dans la pile un objet de type

Test en appellant le constructeur sans parametre (ou celui avec un seul
parametre par defaut) je dois ecrire (et c'est la seule syntaxe possible) :
Test toto;

en revanche si j'avais voulu créer l'objet sur le tas, j'aurais pu
l'ecrire :

Test* toto = new Test;
ou bien :
Test* toto = new Test();

je me trompe?

Back to top
giova
Guest





PostPosted: Fri May 21, 2004 1:01 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote

Fabien LE LEZ wrote:

Quote:
On Fri, 21 May 2004 14:47:17 +0200, giova <pas (AT) de (DOT) mail> wrote:


Ceci est une déclaration de fonction, rien à voir avec la création
d'un objet.

tu veux dire que c'est intéprété comme etant un prototype plutot non?


C'est bien ce que j'ai dit.
oui pardon, j'avoue etre encore un peu embrouillé entre déclaraion et

définition, ca rentre lentement :)

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Fri May 21, 2004 1:14 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote

giova <pas (AT) de (DOT) mail> writes:

Quote:
donc si je comprends bien, pour déclarer dans la pile un objet de type Test
en appellant le constructeur sans parametre (ou celui avec un seul
parametre par defaut)

Pour autant que le fait qu'il y a un parametre par defaut soit visible
a cet endroit

Quote:
je dois ecrire (et c'est la seule syntaxe possible) :
Test toto;

Effectivement.

Test toto = Test();

a le meme effet mais appelle le constructeur par defaut puis le
constructeur de copie puis le destructeur avec autorisation pour le
compilateur d'utiliser le constructeur par defaut uniquement (mais pas
l'autorisation de sauter le test d'accessibilite du constructeur de
copie).

Quote:
en revanche si j'avais voulu créer l'objet sur le tas, j'aurais pu l'ecrire:

Test* toto = new Test;
ou bien :
Test* toto = new Test();

je me trompe?

Non. En complement, dans les listes d'initialisation,
toto()
indique bien l'appel au constructeur par defaut.

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
Michel Michaud
Guest





PostPosted: Fri May 21, 2004 2:09 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote

Dans news:rkura0h2b37ogn1iddc8it5sh69c5pdk9t (AT) 4ax (DOT) com, Fabien LE
LEZ <gramster (AT) gramster (DOT) com> a écrit :
Quote:
On Fri, 21 May 2004 14:47:17 +0200, giova <pas (AT) de (DOT) mail> wrote:

Ceci est une déclaration de fonction, rien à voir avec la
création d'un objet.

tu veux dire que c'est intéprété comme etant un prototype
plutot non?

C'est bien ce que j'ai dit.

Sauf que C++ ne connaît pas les « prototypes » (ce mot n'est
pas utilisé dans la norme, on parle simplement de déclaration).

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/




Back to top
Jean-Noël Mégoz
Guest





PostPosted: Fri May 21, 2004 3:10 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote


"giova" <pas (AT) de (DOT) mail> a écrit dans le message de
news:40adf5cb$0$19644$626a14ce (AT) news (DOT) free.fr...
Quote:
bonjour

j'ai une classe Test avec (disons) un simple constructeur :

Test(int num=1)
{
cout<<"construceur : "< }

alors je ne comprends pas pourquoi Test toto() n'appelle pas le
constructeur avec un parametre par defaut ???

J'ai bien lu tout ce que les autres ont répondu, mais personne, me
semble-t-il n'a simplement indiqué que le constructeur donné ici n'est *pas*
un "constructeur avec un paramètre par défaut", mais un "constructeur avec
un paramètre entier ayant une valeur par défaut".
Si j'ai bien tout compris au c++, ça fait une différence, et de taille !
J.No.



Back to top
giova
Guest





PostPosted: Fri May 21, 2004 4:01 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote

Jean-Noël Mégoz wrote:
Quote:
"giova" <pas (AT) de (DOT) mail> a écrit dans le message de
news:40adf5cb$0$19644$626a14ce (AT) news (DOT) free.fr...

bonjour

j'ai une classe Test avec (disons) un simple constructeur :

Test(int num=1)
{
cout<<"construceur : "< }

alors je ne comprends pas pourquoi Test toto() n'appelle pas le
constructeur avec un parametre par defaut ???


J'ai bien lu tout ce que les autres ont répondu, mais personne, me
semble-t-il n'a simplement indiqué que le constructeur donné ici n'est *pas*
un "constructeur avec un paramètre par défaut", mais un "constructeur avec
un paramètre entier ayant une valeur par défaut".
Si j'ai bien tout compris au c++, ça fait une différence, et de taille !
J.No.



Hmm mais c'est quoi un constructeur avec un parametre par defaut pour
toi dans ce cas??

Back to top
Jean-Noël Mégoz
Guest





PostPosted: Fri May 21, 2004 8:12 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote


"giova" <pas (AT) de (DOT) mail> a écrit dans le message de
news:40ae27b8$0$21568$626a14ce (AT) news (DOT) free.fr...
Quote:
Jean-Noël Mégoz wrote:
"giova" <pas (AT) de (DOT) mail> a écrit dans le message de
news:40adf5cb$0$19644$626a14ce (AT) news (DOT) free.fr...

j'ai une classe Test avec (disons) un simple constructeur :

Test(int num=1)
{
cout<<"construceur : "< }

alors je ne comprends pas pourquoi Test toto() n'appelle pas le
constructeur avec un parametre par defaut ???

Hmm mais c'est quoi un constructeur avec un parametre par defaut pour
toi dans ce cas??

Ben ce n'est rien, justement ! Ça n'existe pas !
Selon ton message initial, tu voulais que "Test toto();" soit interprété
comme "Test toto(1);"... Et ça, c'est impossible.



Back to top
Jean-Noël Mégoz
Guest





PostPosted: Fri May 21, 2004 8:54 pm    Post subject: Re: Probleme sur un constructeur avec un parametre par defau Reply with quote


"Jean-Noël Mégoz" <nospam_jnmegoz (AT) infonie (DOT) fr> a écrit dans le message de
news:40ae6236$0$7703$636a15ce (AT) news (DOT) free.fr...
Quote:


Ben ce n'est rien, justement ! Ça n'existe pas !
Selon ton message initial, tu voulais que "Test toto();" soit interprété
comme "Test toto(1);"... Et ça, c'est impossible.

Je crois que j'ai perdu une occasion de me taire ! Désolé, je réalise en me

relisant que c'est tout à fait possible ! Je me disais que la surcharge des
fonctions étant basée sur les types et le nombre des arguments, on ne
pouvait passer de 0 à 1 paramètres. Mais bon, j'ai tout faux, désolé.
Par contre, maintenant que je réalise mon erreur, je tique sur un cas...
tordu, certes, mais concevable.

Soit une classe Classe, dont on définit 2 constructeurs ainsi :
Classe::Classe(int i=0)
{
cout << "argument entier" << endl;
}
Classe::Classe(float f=0.0)
{
cout << "argument flottant" << endl;
}

Lors de l'instanciation :
Classe objet;
quel constructeur sera appelé par défaut ? Le 1er ? Le 2nd ? Ou on a alors
un comportement indéterminé du programme ? À moins que ce ne soit le compilo
qui hurle, dans ce cas...



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  Next
Page 1 of 2

 
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.