Instanciation de classe en C++ [Résolu]

Signaler
Messages postés
27
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
13 novembre 2006
-
Messages postés
27
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
13 novembre 2006
-
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.

Je vous remercie d'avance.

12 réponses

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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)

J'espère que cela pourra t'aider.

Shell
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Perso j'ai rien compris a ton problème...

Shell
Messages postés
14974
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
18 février 2021
94
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
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
+1 pour buno, c'est vrai qu'apres t'avoir lu ca correspond peut-etre a ce qu'il (ou elle ;-)) a voulu dire, mais ca reste qd meme assez obscur !

TuRn3r
Messages postés
27
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
13 novembre 2006

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.
Messages postés
27
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
13 novembre 2006

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.
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
Ben moi perso, c'est pas que je veux pas t'aider, mais j'ai toujours pas compris ce que tu veux faire, fait voir ton code !

TuRn3r
Messages postés
27
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
13 novembre 2006

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

Merci encore à tous.
Messages postés
27
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
13 novembre 2006

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.
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
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~() {};

       string  getNom() {return nom;}
       void hello() { cout << "hello world !" << endl; }
}  

/********************/
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 !!

TuRn3r
Messages postés
27
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
13 novembre 2006

    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.

Merci encore les gars.
Messages postés
27
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
13 novembre 2006

Le tout dois tenir dans la tête d'un petit robot voilà pourquoi je me casse tant la tête avec ces question de mémoire et de performance.