solidsnake88
Messages postés27Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention13 novembre 2006
-
17 oct. 2006 à 11:42
solidsnake88
Messages postés27Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention13 novembre 2006
-
18 oct. 2006 à 16:53
Bonjour a tous.
Une petite question dont la reponse m'aiderai beaucoup. J'ai une classe A et des noms de classe a,b,c,d... qui sont des strings et je voudrais crees des classes de type A dont les noms sont a,b,c pour pouvoir apres reutiliser la notation a.methode(), b.methode(). Ceci de maniere automatique (je ne veux pas taper A a...) car les noms ne sont pas disponible a l'origine. J'ai cherche un peu sur google l'instanciation a partir de nom mais je n'ai pas ete capable de trouver.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 18 oct. 2006 à 10:05
En général lorsqu'on souhaite instancier des objets a la volée, on crée ce qu'on appelle une collection.
Une collection est tout simplement une classe disposant d'une variable de type tableau correspondant à une autre classe.
En plus de cette variable des fonctions membres telles ques Add, Remove, Append, Insert, Clear, sont nécéssaire.
Voici un exemple :
// Ici c'est ta classe de base pour créer tes objets
Class Voiture
{
// ...
public :
Voiture();
~Voiture();
};
class CollectionDeVoitures()
{
// Ici on déclare un tableau de voitures
Voiture mesVoitures[1024];
public :
int Ajouter();
bool Supprimer(int iIndex);
int DonnerPosition(Voitures laVoiture);
// ....etc...
}
Voila en gros a quoi ca doit ressembler.
Cela reviens a créer une classe qui gere dynamiquement un tableau (ici le tableau de Voitues)
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 17 oct. 2006 à 14:36
Je pense avoir compris la question...qui débouche sur un problème de conception très grave.
En fait, le Monsieur (ou la Madame) voudrait créer des objets portant des "noms dynamiques"!! En gros, il va lire dans un fichier (par exemple): "truc" et "machin" et il voudrait ensuite déclarer des objets comme ceci
MaClasse truc;
MaClasse machin;
D'où la remarque suivante: soit j'ai bien compris, et il y a un gros problème de conception; soit je suis à côté de la plaque, et il y a un problème de communication.
Dans les 2 cas, y'a un problème...
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
solidsnake88
Messages postés27Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention13 novembre 2006 18 oct. 2006 à 01:36
Désolé pour le retard j'étais un peu surbooké cet après-midi. Buno a parfaitement compris. Je suis desolé pour la description plus qu'approximative du problème mais je me suis fait comprendre c'est l'essentiel.
D'aprés ce qu'a dit Buno il y a une grave erreur de conception et c'est tout à fait possible mais le projet est assez ambicieux et je pense que je suis plutôt tombé sur un os et dans ce cas il va falloir pédaler fort pour sortir de ce trou à rat. Alors quelqu'un (Buno) aurait il une solution a ce petit problème. Pour être un peu plus clair j'ai un flot de donnée (du code c++) qui arrive d'un côté et de l'autre je dois essayer au mieux de simuler ce qu'il fait pour un gros projet d'IA. Voilà la chose. Je pourrais rester des heures à essayer d'expliquer mais ca ne servirais à rien à part si ca interresse quelqu'un ;-).
Merci encore d'avoir lu mon message c'est déjà encourageant. Merci encore à tous.
solidsnake88
Messages postés27Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention13 novembre 2006 18 oct. 2006 à 11:24
Tout d'abord merci.
En effet c'est ce que je suis en train d'utiliser avec un autre tableau qui me donne la correspondance avec le nom de l'objet. C'est ce qui vient à l'esprit en premier. Mais j'aurais besoin d'un tout petit peu plus de souplesse, c'est pour le raffinement mais visiblement je pense que le projet va rester tel quel!! Si quelqu'un a un jour une solution qu'il me prévienne.
En tout cas merci de s'être penché sur un problème aussi dénué de sens pour le reste du monde. Merci à tous.
solidsnake88
Messages postés27Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention13 novembre 2006 18 oct. 2006 à 15:32
C'ets pas le code qui est important. Tout de suite le code. Non il faut réflechir avant. Si tu veux du code en voila un apercu. Je viens de l'inventer pour ton plaisir alors délecte toi.
{
string a = "bonjour";
class A,B,
fonction_miracle(a, A);
bonjour.hello();
}
Et la à l'écran apparait un beau et grand "helloworld". Voilà mon petit problème. Je t'en supplie TuRn3r trouve la solution_miracle je te sens chaud bouillant. Sinon j'ai un autre problème plus conventionel. Sauriez vous si il existe des problèmes d'allocations lorsque l'on crée des vectors du genre un vector écrit par dessus un autre vector ou bien est ce que c'est bien géré par la stl. Ave vous déjà se genre de problème. J'ai exploré jusqu'au fichier memory des includes sans trouver d'erreur alors je pense que ca vient de moi et la je peu fournir du code mais je trouve que c'est assez mal poli de demander une correction alors si ca tente quelqu'un il y a quand même quelques lignes
solidsnake88
Messages postés27Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention13 novembre 2006 18 oct. 2006 à 15:35
Juste un petit avis de tout le monde.
Est-ce que l'on perd vraiment en rapidité et espace mémoire à l'éxécution en utilisant la STL plutôt que du pointeur de base. J'ai lu quelques tests mais vos avis sont les bienvenues.
turnerom
Messages postés492Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention12 janvier 20121 18 oct. 2006 à 15:59
Alors non seulement ce que tu veux faire est impossible, mais en plus, ca n'a aucun sens. Quel est l'interet d'instancier des classes avec un nom provenant d'une string par exemple.
Ce serai pas plutot ca que tu veux :
class A
{
private :
string nom;
public :
A(string s) : nom(s) {}
A~() {};
/********************/
int main (void)
{
string a = "je suis A";
A(a);
A.hello();
cout << a.nom() << endl;
}
Sinon explique clairement dans quel but du veux faire ca !!
<hr size="2" width="100%" />Pour ta 2e question, la STL est la pour etre utilisé alors n'hésite pas.
Quand tu dis " lorsque l'on crée des vectors du genre un vector écrit par dessus un autre vector" tu veux dire des vectors de vectors (exemple std::vector<std::vector > ) oui c'est bien géré par la STL ne t'inquiete pas !!
solidsnake88
Messages postés27Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention13 novembre 2006 18 oct. 2006 à 16:51
A.hello();
cout << a.nom() << endl;
}
Si tu as bien écrit a.nom() je suppose que ta méthode s'appelant getNom tu veux dire a.getNom(). Et si tu a volontairement oublié la majuscule alors oui c'est ce que je veux faire mais je doute qu'une telle solution fonctionne!!!!!! Si elle fonctionne avec ton compilateur donne le moi!!!!! J'ai déjà expliqué dans quel but je veux le faire c'est en quelque sorte pour faire du c++ en mode console donc oui ca a du sens pour moi.
En ce qui concerne la STL je voudrais des benchs assez précis de la différence de performance. Par exemple combien vont me prendre les attributs liés à l'utilisation de la classe vector. C'est une template qui est gérée en interne de maniére plus lourde quoiqu'elle soit castée statiquement à la compilation il me semble. Je voudrais pouvoir mesurer les pertes que j'ai au niveau mémoire et le ralentissement qui en resulte.
Et tu as raison à propos des vector de vector la je fais confiance à IBM mais j'ai le problème suivant:
-Déclaration et initialisation d'un vector A.
-Déclaration et initialisation d'un vector B
Deux lignes de code plus loin j'ai B qui écrit sur A ou l'inverse et je me retrouve donc avec A[1][0] = B[0][0] ce que je n'ai jamais demandé!!!!! J'ai donc étudié tout les fichier qui traite de vector : vector, memory à la recherche d'une éventuelle erreur lors de l'install de vc++ mais tout semble ok alors je m'arrache les cheveux pour passer le temps. Je songe à tout reécrire en bon vieux C.
Voilà si quelqu'un veux du code pour le diner en vieux geek je peux lui en donner.