Classe abstraite et constructeur par copie
Fermé
walternative
Messages postés
2
Date d'inscription
dimanche 18 mars 2012
Statut
Membre
Dernière intervention
14 mai 2014
-
14 mai 2014 à 10:56
Utilisateur anonyme - 14 mai 2014 à 11:45
Utilisateur anonyme - 14 mai 2014 à 11:45
A voir également:
- Constructeur par copie java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Copie cachée - Guide
- Java apk - Télécharger - Langages
- Copie écran samsung - Guide
3 réponses
Utilisateur anonyme
Modifié par nagashima le 14/05/2014 à 11:25
Modifié par nagashima le 14/05/2014 à 11:25
salut,
je t'ai fais un exemple :
le constructeur ne peut pas être surchargé, mais tu peux l'appeler en même temps que la classe dérivée.
naga
je t'ai fais un exemple :
class Base {
public:
Base(int val){}
virtual int Get() = 0;
};
class Derived1 : Base
{
private:
int value;
public :
Derived1(int val) :Base(val)
{
value = val;
}
int Get() {
return value > 0;
}
};
le constructeur ne peut pas être surchargé, mais tu peux l'appeler en même temps que la classe dérivée.
naga
walternative
Messages postés
2
Date d'inscription
dimanche 18 mars 2012
Statut
Membre
Dernière intervention
14 mai 2014
14 mai 2014 à 11:30
14 mai 2014 à 11:30
wouahou Merci SO MUCH !!!
Je ne pensais pas avoir une réponse du tout ! Merci infiniement !
Cela dit, j'ai du mal m'expliquer.
Je veux avoir une méthode dans la classe mère qui ferait :
bool classeMere::canMove(SENS sens, chaineBrique* chaine)
{
classeMere copie = this; // <-- Impossible d'utiliser le constructeur par copie de la classe abstraite
copie.movePiece(SENS);
return !copie.detecterCollision(chaine);
}
Pour ne pas avoir dans chaque classe fille :
bool classeFille_1::canMove(SENS sens, chaineBrique* chaine)
{
classeFille_1 copie = this; // <-- Juste ca qui change
copie.movePiece(SENS);
return !copie.detecterCollision(chaine);
}
bool classeFille_2::canMove(SENS sens, chaineBrique* chaine)
{
classeFille_2 copie = this; // <-- Juste ca qui change
copie.movePiece(SENS);
return !copie.detecterCollision(chaine);
}
et ainsi de suite...
Je ne pensais pas avoir une réponse du tout ! Merci infiniement !
Cela dit, j'ai du mal m'expliquer.
Je veux avoir une méthode dans la classe mère qui ferait :
bool classeMere::canMove(SENS sens, chaineBrique* chaine)
{
classeMere copie = this; // <-- Impossible d'utiliser le constructeur par copie de la classe abstraite
copie.movePiece(SENS);
return !copie.detecterCollision(chaine);
}
Pour ne pas avoir dans chaque classe fille :
bool classeFille_1::canMove(SENS sens, chaineBrique* chaine)
{
classeFille_1 copie = this; // <-- Juste ca qui change
copie.movePiece(SENS);
return !copie.detecterCollision(chaine);
}
bool classeFille_2::canMove(SENS sens, chaineBrique* chaine)
{
classeFille_2 copie = this; // <-- Juste ca qui change
copie.movePiece(SENS);
return !copie.detecterCollision(chaine);
}
et ainsi de suite...
Utilisateur anonyme
14 mai 2014 à 11:45
14 mai 2014 à 11:45
dans ce cas tu n'as même pas besoin de faire quoi que ce soit : tu déclare la fonction "normalement" et les classes filles vont en hériter. par exemple tu peux faire :
ici, j'ai ma méthode test() qui est déclaré normalement dans ma classe mère. Je peux y accéder depuis le main de manière transparente :
attention tout de même, j'ai du rajouter l'attribut public au niveau de la déclaration de ma seconde classe (class Derived1 : public dep).
si tu as des question, n'hésites pas.
naga
class dep {
public:
dep(){}
dep(int val){}
virtual int Get() = 0;
int test() { return 0; }
};
class Derived1 : public dep
{
private:
int value;
public:
Derived1() :dep()
{
value = 0;
}
Derived1(int val) :dep(val)
{
value = val;
}
int Get() {
return value > 0;
}
int recup_test(){ return test(); }
};
ici, j'ai ma méthode test() qui est déclaré normalement dans ma classe mère. Je peux y accéder depuis le main de manière transparente :
int _tmain(int argc, _TCHAR* argv[])
{
Derived1 * d1 = new Derived1(1);
int i = d1->Get();
i = d1->test();
i = d1->recup_test();
return 0;
}
attention tout de même, j'ai du rajouter l'attribut public au niveau de la déclaration de ma seconde classe (class Derived1 : public dep).
si tu as des question, n'hésites pas.
naga