Pages : 1
#1 Le 16/03/2007, à 21:29
- tigresse
[C++]Héritage
Bonjour,
j'ai une
classe A{
private:
int x, int y;
int **tab;
A(int a, int b){
x = a;
y = b;
for(int i=0; i<x; i++){
tab[i] = new int [x];
for(int j=0; j<y; j++)
tab[j] = new int [y];
}
}
int getX(){
return x;
}
int getY(){
return y;
}
int **getTab(){
return tab;
}
};
une classe B qui hérite de A :
class B:public A{
public:
B(char *nom){
//...
}
};
Dans le cadre d'un exo, B doit hériter de A, A ne doit pas être en attribut.
Dans le constructeur de B, on doit utiliser une instance de A.
Ce que je voudrais savoir, c'est comment faire pour que l'objet A construit dans le constructeur de B puisse être utilisé dans toutes les méthodes de B.
En mettant A en attribut de B, ça ne m'aurait pas poser de soucis mais là, je ne sais pas comment faire.
De plus, je voudrais savoir si lorsqu'une classe B hérite de A, est-ce que dans le constructeur de B, il est obligatoire d'utiliser le constructeur de A ?
Si on est pas obliger, comment faire ?
Merci
Hors ligne
#2 Le 16/03/2007, à 23:10
- manal
Re : [C++]Héritage
Dans le constructeur de B, on doit utiliser une instance de A.
Je ne comprend pas très bien cette phrase.
Ce que je voudrais savoir, c'est comment faire pour que l'objet A construit dans le constructeur de B puisse être utilisé dans toutes les méthodes de B.
Tu ne construis pas d'objet A en faisant :
B *my_B = new B("dummy");
Tu créeras une instance de B qui possédera les méthodes et attributs de A (puis que B est dérivé de A), ainsi que les méthodes et attributs de B (bien entendu).
Par exemple :
my_B->getX();
sera correct
De plus, je voudrais savoir si lorsqu'une classe B hérite de A, est-ce que dans le constructeur de B, il est obligatoire d'utiliser le constructeur de A ?
Non
Si on est pas obliger, comment faire ?
Comme tu le fais dans l'exemple que tu donnes, c'est à dire sans préciser que le constructeur de B est une surcharge du constructeur de A.
Mon C++ est assez rouillé, j'espère ne pas te dire de bétises.
Bon courage
Libère ton esprit, et ton cul suivra
Hors ligne
#3 Le 17/03/2007, à 02:21
- Luc Hermitte
Re : [C++]Héritage
Quoi ? Quelle surcharge ? Cela n'a pas de sens appliqué aux constructeurs de classes différentes.
Un constructeur de la classe fille ne surcharge en rien un constructeur de la classe mère. C'est une fonction différente (dans le nom et dans la portée aussi j'ai envie de dire).
Un constructeur de la classe mère sera toujours utilisé. Tu n'a pas le choix.
Si tu ne précises rien dans la liste d'initialisation de tes constructeurs des classes filles, c'est le constructeur par défaut (celui à 0 argument) de la classe mère qui sera appelé.
#4 Le 17/03/2007, à 15:24
- Moka_one
Re : [C++]Héritage
comme te l'as dit luc hermitte tu es obligé d'utiliser le constructeur de la classe mere (A) dans le constructeur de la classe fille (B) sinon ce seront les valeurs par defaut qui seront choisit (tu n'a d'ailleur pas fait de constructeur par defaut dans ta classe A qui devrait ressembler a ca par exemple
A(){
x = 2;
y = 2;
for(int i=0; i<x; i++){
tab[i] = new int [x];
for(int j=0; j<y; j++)
tab[j] = new int [y];
}
j'ai pris 2 par defaut pour remplir un peu ton tab
Ensuite ton constructeur B devra faire appel au constructeur mere
B::B(char *nom):A(x,y){}
ou a celui par defaut
B::B(char *nom):A(){}
B peut avoir un constructeur par defaut lui aussi.
Ensuite
Si tu créée un objet B il sera automatiquement "relié" à A et tu pourras lui affecter les methodes de A ou de B comme bon te semble.
par exemple
dans ta classe B tu pourra faire
affichertab();
en admettant que tu ait une methode affichertab() dans ta classe A.
Voila j'espere avoir repondu a toute tes questions
Dernière modification par Moka_one (Le 17/03/2007, à 15:25)
La défaite est éphémère
Seule la victoire est éternelle
Hors ligne
#5 Le 17/03/2007, à 15:40
- manal
Re : [C++]Héritage
Tu as raison Luc, je me suis un peu emmêlé les pinceaux. Mon C++ est vraiment rouillé. J'ai surtout confondu avec le PHP dans lequel tu peux faire appel ou non aux méthodes parentes.
J'espère tout de même ne pas avoir dit trop de bêtises.
Libère ton esprit, et ton cul suivra
Hors ligne
#6 Le 17/03/2007, à 16:08
- best_friend_fr
Re : [C++]Héritage
Salut
Dans ton cas, le plus simple est de créer un constructeur par défaut
A() {
}
qui ne fait rien
et une méthode init
void A::init(int i,int j) {
}
qui fait l'initialisation.
Ensuite, tu fais ton constructeur B
B::B(char* nom):A() {
chargement_de_nom(nom)
init(i,j);
}
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
Pages : 1