Fonction transform dans classe mère avec def dans classe fille

Fermé
Vlntn Messages postés 1 Date d'inscription vendredi 24 mai 2013 Statut Membre Dernière intervention 24 mai 2013 - 24 mai 2013 à 14:48
BOB-XM2 Messages postés 180 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 23 juillet 2013 - 15 juin 2013 à 00:02
Bonjour à tous,

Voici mon premier message sur commentcamarche. Mon problème est simple, j'ai une classe mère qui possède un vector en champ protégé et je souhaite définir une méthode qui utilise la fonction transform de la STL. Le code de cette méthode est quasiment le même pour toutes mes classes filles, la seule chose qui change est la fonction que prend transform en parametre. J'aimerai donc pouvoir définir cette fonction dans mes classes filles. C'est ici que ça bloque et malgré différents essais ça ne marche pas. Je vous présente deux petits exemples pour illustrer mon propos où dans les deux ça ne marche pas :

#include <vector>
#include <algorithm>
 
using namespace std;
 
struct mere {
	mere(int n) : value(n) {}
	virtual int modif(int ) =0;
	void prix() {
		transform(value.begin(), value.end(), value.begin(), modif);
	}
	protected :
		vector<int> value;
};
 
struct fille : public mere {
	fille(int n, int K) : mere(n), K(K) {}
	int modif(int x) { return K*x;}
	private :
		int K;
};


#include <vector>
#include <algorithm>
 
using namespace std;
 
struct mere {
	mere(int n) : value(n), modif() {}
	void prix() {
		transform(value.begin(), value.end(), value.begin(), modif);
	}
	protected :
		vector<int> value;
                struct modif_value {
                        virtual int operator()(int );
                } modif;
};
 
struct fille : public mere {
	fille(int n, int K) : mere(n), K(K) , mK() {}
	private :
		int K;
                struct modifK : public modif_value {
                        int operator()(int x) {return K*x;}
                } mK;
};


Quelqu'un aurait t'il une solution? Par avance merci.

1 réponse

BOB-XM2 Messages postés 180 Date d'inscription samedi 23 février 2008 Statut Membre Dernière intervention 23 juillet 2013 65
Modifié par BOB-XM2 le 15/06/2013 à 00:03
c'est normal que ca marche pas... la solution la mieux adaptée est l'utilisation de fonctions amies (déclarées friend void my_fonction(int x, float f ....) ) ceci dit que la fonction, ainsi déclarée dans le header de la struct mère et définie n'importe où, peut accéder a toutes les ressources de mere)
ca marchera à 100% ;)
0