J'ai une classe enfant qui hérite de d'une classe parent.
J'ai écrit le constructeur de parent (celui sans parametre) et quand je fais
un new enfant, le constructeur de parent est bien appelé.
J'ai aussi écrit un autre constructeur pour parent (avec un parametre) et
quand je fais un new enfant(1), le compilateur me dit qu'il ne trouve pas le
constructeur ! pourquoi ?
J'ai une classe enfant qui hérite de d'une classe parent.
J'ai écrit le constructeur de parent (celui sans parametre) et quand je fais un new enfant, le constructeur de parent est bien appelé. J'ai aussi écrit un autre constructeur pour parent (avec un parametre) et quand je fais un new enfant(1), le compilateur me dit qu'il ne trouve pas le constructeur ! pourquoi ?
Parceque personne n'appelle le constructeur de parent si tu ne le fais pas. enfant doit aussi avoir ses constructeurs qui appeleront les constructeurs de parent : enfant::enfant() : parent() { ... }
enfant::enfant( int i ) : parent( i ) { ... }
Par contre, je ne suis pas sûr que enfant doive dériver de parent (ca dépend du sens que tu donnes à parent)
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
PurL wrote:
Bonjour,
J'ai une classe enfant qui hérite de d'une classe parent.
J'ai écrit le constructeur de parent (celui sans parametre) et quand je fais
un new enfant, le constructeur de parent est bien appelé.
J'ai aussi écrit un autre constructeur pour parent (avec un parametre) et
quand je fais un new enfant(1), le compilateur me dit qu'il ne trouve pas le
constructeur ! pourquoi ?
Parceque personne n'appelle le constructeur de parent si tu ne le fais pas.
enfant doit aussi avoir ses constructeurs qui appeleront les
constructeurs de parent :
enfant::enfant() : parent() {
...
}
enfant::enfant( int i ) : parent( i ) {
...
}
Par contre, je ne suis pas sûr que enfant doive dériver de parent (ca
dépend du sens que tu donnes à parent)
--
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/
J'ai une classe enfant qui hérite de d'une classe parent.
J'ai écrit le constructeur de parent (celui sans parametre) et quand je fais un new enfant, le constructeur de parent est bien appelé. J'ai aussi écrit un autre constructeur pour parent (avec un parametre) et quand je fais un new enfant(1), le compilateur me dit qu'il ne trouve pas le constructeur ! pourquoi ?
Parceque personne n'appelle le constructeur de parent si tu ne le fais pas. enfant doit aussi avoir ses constructeurs qui appeleront les constructeurs de parent : enfant::enfant() : parent() { ... }
enfant::enfant( int i ) : parent( i ) { ... }
Par contre, je ne suis pas sûr que enfant doive dériver de parent (ca dépend du sens que tu donnes à parent)
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
PurL
Benoit Rousseau wrote:
PurL wrote:
Bonjour,
J'ai une classe enfant qui hérite de d'une classe parent.
J'ai écrit le constructeur de parent (celui sans parametre) et quand je fais un new enfant, le constructeur de parent est bien appelé. J'ai aussi écrit un autre constructeur pour parent (avec un parametre) et quand je fais un new enfant(1), le compilateur me dit qu'il ne trouve pas le constructeur ! pourquoi ?
Parceque personne n'appelle le constructeur de parent si tu ne le fais pas. enfant doit aussi avoir ses constructeurs qui appeleront les constructeurs de parent : enfant::enfant() : parent() { ... }
Merci de ta réponse. Mais dans ce premier cas, il n'est pas nécessaire d'écrire le constructeur sans parametre pour enfant. Le compilateur appelle celui du parent.
enfant::enfant( int i ) : parent( i ) { ... }
Bonne réponse, mais je ne comprends pas pourquoi le compilateur peut appeler le constructeur par défaut de parent à partir d'enfant, il peut aussi appeler les fonctions publiques (avec ou sans parametres) de parent à partir d'enfant - et tout ça sans écrire le moindre code dans enfant - mais il peut pas appeler implicitement les constructeurs avec parametres de parent à partir d'enfant ! Je vois pas la raison de cette limitation...
PurL
Benoit Rousseau wrote:
PurL wrote:
Bonjour,
J'ai une classe enfant qui hérite de d'une classe parent.
J'ai écrit le constructeur de parent (celui sans parametre) et quand
je fais un new enfant, le constructeur de parent est bien appelé.
J'ai aussi écrit un autre constructeur pour parent (avec un
parametre) et quand je fais un new enfant(1), le compilateur me dit
qu'il ne trouve pas le constructeur ! pourquoi ?
Parceque personne n'appelle le constructeur de parent si tu ne le
fais pas. enfant doit aussi avoir ses constructeurs qui appeleront les
constructeurs de parent :
enfant::enfant() : parent() {
...
}
Merci de ta réponse.
Mais dans ce premier cas, il n'est pas nécessaire d'écrire le constructeur
sans parametre pour enfant. Le compilateur appelle celui du parent.
enfant::enfant( int i ) : parent( i ) {
...
}
Bonne réponse, mais je ne comprends pas pourquoi le compilateur peut appeler
le constructeur par défaut de parent à partir d'enfant, il peut aussi
appeler les fonctions publiques (avec ou sans parametres) de parent à partir
d'enfant - et tout ça sans écrire le moindre code dans enfant - mais il peut
pas appeler implicitement les constructeurs avec parametres de parent à
partir d'enfant ! Je vois pas la raison de cette limitation...
J'ai une classe enfant qui hérite de d'une classe parent.
J'ai écrit le constructeur de parent (celui sans parametre) et quand je fais un new enfant, le constructeur de parent est bien appelé. J'ai aussi écrit un autre constructeur pour parent (avec un parametre) et quand je fais un new enfant(1), le compilateur me dit qu'il ne trouve pas le constructeur ! pourquoi ?
Parceque personne n'appelle le constructeur de parent si tu ne le fais pas. enfant doit aussi avoir ses constructeurs qui appeleront les constructeurs de parent : enfant::enfant() : parent() { ... }
Merci de ta réponse. Mais dans ce premier cas, il n'est pas nécessaire d'écrire le constructeur sans parametre pour enfant. Le compilateur appelle celui du parent.
enfant::enfant( int i ) : parent( i ) { ... }
Bonne réponse, mais je ne comprends pas pourquoi le compilateur peut appeler le constructeur par défaut de parent à partir d'enfant, il peut aussi appeler les fonctions publiques (avec ou sans parametres) de parent à partir d'enfant - et tout ça sans écrire le moindre code dans enfant - mais il peut pas appeler implicitement les constructeurs avec parametres de parent à partir d'enfant ! Je vois pas la raison de cette limitation...
PurL
Gabriel Dos Reis
"PurL" writes:
[...]
| d'enfant - et tout ça sans écrire le moindre code dans enfant - mais il peut | pas appeler implicitement les constructeurs avec parametres de parent à | partir d'enfant ! Je vois pas la raison de cette limitation...
et le compilateur mettrait quoi comme valeurs pour les paramètres ?
"PurL" <purl-nospam@chez.com> writes:
[...]
| d'enfant - et tout ça sans écrire le moindre code dans enfant - mais il peut
| pas appeler implicitement les constructeurs avec parametres de parent à
| partir d'enfant ! Je vois pas la raison de cette limitation...
et le compilateur mettrait quoi comme valeurs pour les paramètres ?
| d'enfant - et tout ça sans écrire le moindre code dans enfant - mais il peut | pas appeler implicitement les constructeurs avec parametres de parent à | partir d'enfant ! Je vois pas la raison de cette limitation...
et le compilateur mettrait quoi comme valeurs pour les paramètres ?
Benoit Rousseau
PurL wrote:
Bonne réponse, mais je ne comprends pas pourquoi le compilateur peut appeler le constructeur par défaut de parent à partir d'enfant, il peut aussi appeler les fonctions publiques (avec ou sans parametres) de parent à partir d'enfant - et tout ça sans écrire le moindre code dans enfant - mais il peut pas appeler implicitement les constructeurs avec parametres de parent à partir d'enfant ! Je vois pas la raison de cette limitation... Peut être parceque la fonction appelée à la création d'un objet enfant
est la "fonction" enfant::enfant()
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
PurL wrote:
Bonne réponse, mais je ne comprends pas pourquoi le compilateur peut appeler
le constructeur par défaut de parent à partir d'enfant, il peut aussi
appeler les fonctions publiques (avec ou sans parametres) de parent à partir
d'enfant - et tout ça sans écrire le moindre code dans enfant - mais il peut
pas appeler implicitement les constructeurs avec parametres de parent à
partir d'enfant ! Je vois pas la raison de cette limitation...
Peut être parceque la fonction appelée à la création d'un objet enfant
est la "fonction" enfant::enfant()
--
--------------------------------------------
Benoît Rousseau : roussebe at spray dot se
Jouez en programmant : http://realtimebattle.sourceforge.net/
Bonne réponse, mais je ne comprends pas pourquoi le compilateur peut appeler le constructeur par défaut de parent à partir d'enfant, il peut aussi appeler les fonctions publiques (avec ou sans parametres) de parent à partir d'enfant - et tout ça sans écrire le moindre code dans enfant - mais il peut pas appeler implicitement les constructeurs avec parametres de parent à partir d'enfant ! Je vois pas la raison de cette limitation... Peut être parceque la fonction appelée à la création d'un objet enfant
est la "fonction" enfant::enfant()
-- -------------------------------------------- Benoît Rousseau : roussebe at spray dot se Jouez en programmant : http://realtimebattle.sourceforge.net/
PurL
Gabriel Dos Reis wrote:
"PurL" writes:
[...]
d'enfant - et tout ça sans écrire le moindre code dans enfant - mais il peut pas appeler implicitement les constructeurs avec parametres de parent à partir d'enfant ! Je vois pas la raison de cette limitation...
et le compilateur mettrait quoi comme valeurs pour les paramètres ?
Bah les valeurs fournies à la création de enfant :
class personne { public: int m_age; personne(){}; personne(int age) { m_age = age; }; };
class enfant : public personne { };
enfant *toto = new enfant; //personne() va etre appelé
enfant *toto = new enfant(12); //faudrait appelé personne(12)
PurL
Gabriel Dos Reis wrote:
"PurL" <purl-nospam@chez.com> writes:
[...]
d'enfant - et tout ça sans écrire le moindre code dans enfant - mais
il peut pas appeler implicitement les constructeurs avec parametres
de parent à partir d'enfant ! Je vois pas la raison de cette
limitation...
et le compilateur mettrait quoi comme valeurs pour les paramètres ?
Bah les valeurs fournies à la création de enfant :
class personne
{
public:
int m_age;
personne(){};
personne(int age) { m_age = age; };
};
class enfant : public personne
{
};
enfant *toto = new enfant;
//personne() va etre appelé
enfant *toto = new enfant(12);
//faudrait appelé personne(12)
d'enfant - et tout ça sans écrire le moindre code dans enfant - mais il peut pas appeler implicitement les constructeurs avec parametres de parent à partir d'enfant ! Je vois pas la raison de cette limitation...
et le compilateur mettrait quoi comme valeurs pour les paramètres ?
Bah les valeurs fournies à la création de enfant :
class personne { public: int m_age; personne(){}; personne(int age) { m_age = age; }; };
class enfant : public personne { };
enfant *toto = new enfant; //personne() va etre appelé
enfant *toto = new enfant(12); //faudrait appelé personne(12)
PurL
Marc Boyer
PurL wrote:
Gabriel Dos Reis wrote:
"PurL" writes: Bah les valeurs fournies à la création de enfant :
Et pourquoi ce seraient les même ?
class point { public: point(int x, int y); }
class point_de_depart: public point { public: point_de_depart(int duree_de_vie, int nbSautMax, int abs=0, int ord=0); }
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
PurL wrote:
Gabriel Dos Reis wrote:
"PurL" <purl-nospam@chez.com> writes:
Bah les valeurs fournies à la création de enfant :
Et pourquoi ce seraient les même ?
class point {
public:
point(int x, int y);
}
class point_de_depart: public point {
public:
point_de_depart(int duree_de_vie, int nbSautMax, int abs=0, int ord=0);
}
Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(
"PurL" writes: Bah les valeurs fournies à la création de enfant :
Et pourquoi ce seraient les même ?
class point { public: point(int x, int y); }
class point_de_depart: public point { public: point_de_depart(int duree_de_vie, int nbSautMax, int abs=0, int ord=0); }
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
PurL
Marc Boyer wrote:
PurL wrote:
Gabriel Dos Reis wrote:
"PurL" writes: Bah les valeurs fournies à la création de enfant :
Et pourquoi ce seraient les même ?
class point { public: point(int x, int y); }
class point_de_depart: public point { public: point_de_depart(int duree_de_vie, int nbSautMax, int abs=0, int ord=0); }
Marc Boyer
Biensur que tu peux créé des constructeurs supplémentaires dans ta classe enfant. Mais dans le cas ou il n'y a pas de constructeurs supplémentaires dans la classe enfants, pourquoi le compilateur ne fait-il pas comme les fonctions à savoir utiliser celles de la classe de base ?
PurL
Marc Boyer wrote:
PurL wrote:
Gabriel Dos Reis wrote:
"PurL" <purl-nospam@chez.com> writes:
Bah les valeurs fournies à la création de enfant :
Et pourquoi ce seraient les même ?
class point {
public:
point(int x, int y);
}
class point_de_depart: public point {
public:
point_de_depart(int duree_de_vie, int nbSautMax, int abs=0, int
ord=0); }
Marc Boyer
Biensur que tu peux créé des constructeurs supplémentaires dans ta classe
enfant. Mais dans le cas ou il n'y a pas de constructeurs supplémentaires
dans la classe enfants, pourquoi le compilateur ne fait-il pas comme les
fonctions à savoir utiliser celles de la classe de base ?
"PurL" writes: Bah les valeurs fournies à la création de enfant :
Et pourquoi ce seraient les même ?
class point { public: point(int x, int y); }
class point_de_depart: public point { public: point_de_depart(int duree_de_vie, int nbSautMax, int abs=0, int ord=0); }
Marc Boyer
Biensur que tu peux créé des constructeurs supplémentaires dans ta classe enfant. Mais dans le cas ou il n'y a pas de constructeurs supplémentaires dans la classe enfants, pourquoi le compilateur ne fait-il pas comme les fonctions à savoir utiliser celles de la classe de base ?
PurL
Gabriel Dos Reis
"PurL" writes:
| Gabriel Dos Reis wrote: | > "PurL" writes: | > | > [...] | > | >> d'enfant - et tout ça sans écrire le moindre code dans enfant - mais | >> il peut pas appeler implicitement les constructeurs avec parametres | >> de parent à partir d'enfant ! Je vois pas la raison de cette | >> limitation... | > | > et le compilateur mettrait quoi comme valeurs pour les paramètres ? | | Bah les valeurs fournies à la création de enfant :
et pourquoi ?
-- Gaby
"PurL" <purl-nospam@chez.com> writes:
| Gabriel Dos Reis wrote:
| > "PurL" <purl-nospam@chez.com> writes:
| >
| > [...]
| >
| >> d'enfant - et tout ça sans écrire le moindre code dans enfant - mais
| >> il peut pas appeler implicitement les constructeurs avec parametres
| >> de parent à partir d'enfant ! Je vois pas la raison de cette
| >> limitation...
| >
| > et le compilateur mettrait quoi comme valeurs pour les paramètres ?
|
| Bah les valeurs fournies à la création de enfant :
| Gabriel Dos Reis wrote: | > "PurL" writes: | > | > [...] | > | >> d'enfant - et tout ça sans écrire le moindre code dans enfant - mais | >> il peut pas appeler implicitement les constructeurs avec parametres | >> de parent à partir d'enfant ! Je vois pas la raison de cette | >> limitation... | > | > et le compilateur mettrait quoi comme valeurs pour les paramètres ? | | Bah les valeurs fournies à la création de enfant :
et pourquoi ?
-- Gaby
Gabriel Dos Reis
"PurL" writes:
| Marc Boyer wrote: | > PurL wrote: | >> Gabriel Dos Reis wrote: | >>> "PurL" writes: | >> Bah les valeurs fournies à la création de enfant : | > | > Et pourquoi ce seraient les même ? | > | > class point { | > public: | > point(int x, int y); | > } | > | > class point_de_depart: public point { | > public: | > point_de_depart(int duree_de_vie, int nbSautMax, int abs=0, int | > ord=0); } | > | > Marc Boyer | | Biensur que tu peux créé des constructeurs supplémentaires dans ta classe | enfant.
C'est un exemple pour te montrer que la notion que tu exposes est mal définie.
-- Gaby
"PurL" <purl-nospam@chez.com> writes:
| Marc Boyer wrote:
| > PurL wrote:
| >> Gabriel Dos Reis wrote:
| >>> "PurL" <purl-nospam@chez.com> writes:
| >> Bah les valeurs fournies à la création de enfant :
| >
| > Et pourquoi ce seraient les même ?
| >
| > class point {
| > public:
| > point(int x, int y);
| > }
| >
| > class point_de_depart: public point {
| > public:
| > point_de_depart(int duree_de_vie, int nbSautMax, int abs=0, int
| > ord=0); }
| >
| > Marc Boyer
|
| Biensur que tu peux créé des constructeurs supplémentaires dans ta classe
| enfant.
C'est un exemple pour te montrer que la notion que tu exposes est mal
définie.
| Marc Boyer wrote: | > PurL wrote: | >> Gabriel Dos Reis wrote: | >>> "PurL" writes: | >> Bah les valeurs fournies à la création de enfant : | > | > Et pourquoi ce seraient les même ? | > | > class point { | > public: | > point(int x, int y); | > } | > | > class point_de_depart: public point { | > public: | > point_de_depart(int duree_de_vie, int nbSautMax, int abs=0, int | > ord=0); } | > | > Marc Boyer | | Biensur que tu peux créé des constructeurs supplémentaires dans ta classe | enfant.
C'est un exemple pour te montrer que la notion que tu exposes est mal définie.
-- Gaby
PurL
et le compilateur mettrait quoi comme valeurs pour les paramètres ?
Bah les valeurs fournies à la création de enfant :
et pourquoi ?
Pour les memes raisons que dans cette exemple :
class parent { public: void fct (int v1, int v2); void fct (float v3); };
class enfant : public parent { }
enfant *toto = new enfant; toto->fct(12, 34); toto->fct(56.78); //dans ce cas il appelle bien la fonction fct de la classe parent et v1 et v24 //dans le premier appel et v3V.78 dans le second appel
Ce que je cherche à comprendre, c'est pourquoi il n'applique pas la meme logique sur les constructeurs ? pour moi un constructeur c'est une simple fonction appelée automatique à la création d'un objet mais je ne vois pas en quoi cela n'empèche pas de gérer la surcharge comme pour l'exemple ci-dessus.
PurL.
et le compilateur mettrait quoi comme valeurs pour les paramètres ?
Bah les valeurs fournies à la création de enfant :
et pourquoi ?
Pour les memes raisons que dans cette exemple :
class parent
{
public:
void fct (int v1, int v2);
void fct (float v3);
};
class enfant : public parent
{
}
enfant *toto = new enfant;
toto->fct(12, 34);
toto->fct(56.78);
//dans ce cas il appelle bien la fonction fct de la classe parent et v1
et v24
//dans le premier appel et v3V.78 dans le second appel
Ce que je cherche à comprendre, c'est pourquoi il n'applique pas la meme
logique sur les constructeurs ?
pour moi un constructeur c'est une simple fonction appelée automatique à la
création d'un objet mais je ne vois pas en quoi cela n'empèche pas de gérer
la surcharge comme pour l'exemple ci-dessus.
et le compilateur mettrait quoi comme valeurs pour les paramètres ?
Bah les valeurs fournies à la création de enfant :
et pourquoi ?
Pour les memes raisons que dans cette exemple :
class parent { public: void fct (int v1, int v2); void fct (float v3); };
class enfant : public parent { }
enfant *toto = new enfant; toto->fct(12, 34); toto->fct(56.78); //dans ce cas il appelle bien la fonction fct de la classe parent et v1 et v24 //dans le premier appel et v3V.78 dans le second appel
Ce que je cherche à comprendre, c'est pourquoi il n'applique pas la meme logique sur les constructeurs ? pour moi un constructeur c'est une simple fonction appelée automatique à la création d'un objet mais je ne vois pas en quoi cela n'empèche pas de gérer la surcharge comme pour l'exemple ci-dessus.