Ah, au temps pour moi... Ceci dit, rien ne t'empeche de créer une classe imbriquée en C++
Où est la différence d'avec le java
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 class Maclass:public Personne { public: class Imbriquee /* héritage éventuel */ { private: friend class Maclass; Imbiquee(); ~Imbriquee(); }; static Imbriquee* GetInstance() { if(imb==NULL) imb=new Imbriquee; return imb; } private: static Imbriquee* imb; }; Maclass::Imbriquee Maclass::imb=NULL;
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Concernant la factory, on va faire ça avec des templates, mais cela ne sera jamais dynamique : les classes à utiliser doivent être connues à la compilation.
Ou alors il faut partir sur des factories plus classiques où l'on enregistre des créateurs qui seront accédés via leur nom.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template <typename TypePersonne> struct CreateurDePersonne{ static Personne* creer(/*args si on veut*/) { return new TypePersonne(/*args si on veut*/); } }; template <> struct CreateurDePersonne<void> { static Personne* creer(/*args si on veut*/) { return new PersonneParDefaut(/*args si on veut*/); } }; //renvoyer un std::auto_ptr<Personne> serait sémantiquement plus propre.
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
Non il y a plus simple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 class Personne { public: virtual string nom()=0 : virtual string prenom( )=0; virtual int age( )=0; }; class PersonneParDefaut:public Personne{ public: static Personne* newPersonne( ) { if (clazz == null ) clazz=new PersonneParDefaut(): return clazz(); } private: static Personne * ( clazz * ) ( ) ; PersonneParDefaut(){} ~PersonneParDefaut(){} string nom() { return "kkk" }: string prenom( ){ return "kjjj" }; int age( ){ return 666; } }; class PersonneAvecAttribut: Personne { public: string nom; string prenom; int age; string nom() { return nom; }: string prenom( ){ return prenom }; int age( ){ return age; } } Personne * constructeurPersonneAvecAttribut() { return new PersonneAvecAttribut(); } PersonneParDefaut::clazz=constructeurPersonneAvecAttribut;
et la c'est aussi simple qu'en Java ....
Mais en C++ il y a pas les anotations ...
Tant qu'à alimenter un troll, savez vous comment faire de l'héritage multiple en Java?
Si vous ne trouvez plus rien, cherchez autre chose...
Vous trouverez ici des tutoriels OpenGL moderne.
Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).
Je suis pas de mauvaise fois mais le méta model de java est accéssible totalement en lecture et un peut en écriture alors qu'en C++
Il ne l'est ni en lecture ni en écriture.
Donc certain type de programme sont infaisable ou très très difficilement en C++
Alors qu'en java faire de la 3D c'est possible facilement et avec des graphismes correcte, pas aussi bien qu'en c++ mais qui quand même peuvent être beau.
Je trouve qui tribal trouble à des graphisme sympathique.
De plus se sont pas les graphismes qui font un bon jeux, il en faut un minimun (ce que java permet ) après il faut de bonne idées (c'est pas trop le sujet mais ca me démengait de le dire )
Fénéantise !
Java et .Net repose (sont des surcouches) sur du C/C++ => tout ce qui existe en Java/.Net est faisable en C/C++. Apres le niveau de difficulté peu varié, mais c est pas le probleme aujourd hui.
Pour les meta model, Qt et le Moc compiler propose deja des chose sympatiques. Sinon Lex/Yak ou CodeWorker, mais ca c'est de l implementation manuelle. C'est pas evident, pas donné a tout le monde mais c'est pourtant le principe des nouvelles techno.
Et pis la reflexivité, franchement on a fait des OS, des serveurs,... tout en fait, ou presque, sans avoir besoin de ca. C'est un confort certes, mais ca serait pas au depends de la securité ? (j'aime bien quand les gens charge dynamiquement un rep de .class par exemple, surtout qu il est tres tres dur de lire un .class...)
(Je dis dis ca, mais pour poser le contexte, je travaille en java (JSE, client lourd (non pas LISP ) ) mais malgré tout, par gout *personnel* mon coeur va pour C++, pour moi Java et .Net c'est privilégié la facilité et la rapidité de *DEV*, c'est un choix economique qui fait legion dans nos contrées et que je ne critique pas, je le regrette c'est pas pareil )
"vaste programme"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 . . .
Comme dirait un certain Coluche :
"Dites nous ce dont vous avez besoin, on vous expliquera comment vous en passer"
Par consequent, j'aimerai que tu me donne un exemple d'algorithme, et je me ferais un plaisir de le traduire en c++, sans reflectivité donc, si c'est possible.
Et dans le cas où ce n'est pas possible, j'aurais appris quelque chose ...
Baaah, pour faire un programme qui se modifie tout seul, on fait souvent ça en LISP non ?
Imagine que je veuille faire un petit programme qui connait quelques trucs de bases, qui peut communiquer de manière basique, et à l'aide d'exemples, on lui apprend et fait comprendre des nouveaux concepts. C'est juste du jeu, mais c'est marrant de jouer à Papa/Maman.
-----
Mais arrêtez de me parler comme si je prenais part au débat C++/Java , j'répondais juste à ceux qui lancent des affirmations sans parfois en être sûrs. D'ailleurs je ne traîne pas sur le forum Java mais C++.
Oui bien sûr... d'ailleurs il suffit d'inclure un compilateur C++ et un manipulateur d'arbre de syntaxe abstraite pour pouvoir faire la même chose dans le cas général...
La Turing-complétude des langages de programmation signifie qu'on peut faire la même chose dans tous, mais pas forcément avec la même facilité... Je préfère un peu de sucre autour de ma machine de Turing merci ! D'ailleurs les utilisateurs de C++ aussi puisqu'ils ne programment plus en assembleur. La réflexivité est très utile pour travailler sur de l'IA forte (enfin des tentatives d'IA fortes), il est inutile de se voiler la face et de prétendre qu'il s'agit d'une fonctionnalité inutile et dont on peut facilement dupliquer les effets. De là à dire qu'elle est indispensable... J'en doute, pour la plupart des applications.
Toutefois il faut à mon avis toujours garder à l'esprit le paradoxe de Blub et rester prudent dans ses appréciations.
C++ est un excellent langage et le restera, bien que Java soit effectivement un choix d'avenir, de plus en plus viable avec l'augmentation de puissance des machines et l'amélioration de la JVM, et avec son lot de fonctionnalités intéressantes en plus de celle du C++ (et quelques unes en moins, il est vrai) : GC, réflexivité, Sandboxing, bytecode multiplateforme (la plupart du temps !)...
--
Jedaï
Bon, juste une citation pour ce soir :
Tant que Java ne permettra pas le niveau d'optimisation disponible en c/c++, c'est a dire tant que Java utilisera une couche JVM, il restera inutilisable pour creer des applications de type industrielles lourdes ( genre moteur de jeux video, mon domaine justement), ou n'importe quelle application où les performances brutes sont exceptionellement importantes ....Envoyé par Jedai
Par contre, je ne contesterai jamais l'avenir du Java pour le reste des applications ... suffit de voir son utilisation sur les pda / telephones mobiles.
Ben, dans le sens où je suis sûr que Lisp a (avait ?) la réputation d'être utilisé en IA pour ces qualités-là faciles à mettre en oeuvre, je pense avoir le droit de dire "non".
A moins que la reflexivité n'a rien à voir là-dedans auquel cas je t'accorde le droit de dire "oui" et de me dire de m'en aller Mais sinon, stop les taquineries pour aujourd'hui .
Personnelement, je trouve qu'il est plus dur de faire un "bon" programme C++, qu'un "bon" programme Java.
par "bon", je parle de lisibilité, de maintenabilité, d'extensibilité, de respect des paradigmes/regles, de fiabilité, et bien sur de perfomances.
Le C++ permet de TOUT faire, fonctionnellement parlant. Mais en terme de lisibilité, fiabilité, ... il faut etre un expert dans beaucoup de domaine:
- la programmation imperative (type C, avec variables globales)
- la programmation objet (type C++, avec instances de classes)
- la gestion structure/mémoire (struct/union/class, malloc/free/new/delete, tableaux/collections, pointeurs/reference/valeur)
Le Java permet de faire moins de choses que le C++, fonctionnellement parlant (pas de jeux, pas de drivers, ...) . Mais il est beaucoup plus facile de faire un "bon" programme car seule la maitrise du paradigme OO est necessaire.
Une fois que le design d'une classe est choisi (UML/Pattern), il n'y a generalement qu'une seule maniere de la coder (syntaxe restreinte, compilateur stricte, JDK standard).
En C++, on a toujours des "choix" possibles au mement de coder. Ce sont ces choix qui permettent des optimisations au niveau "performance" qu'on ne pourra pas faire en Java. Le probleme, c'est qu'un non-expert risque souvent de faire un mauvais choix pour des raisons de facilité d'ecriture.
Bien sur, ca n'empeche pas qu'il existe des mauvais programme Java (une classe, tout en static ) et de tres bon programme C++. Mais, de par mon experience, je trouve qu'il est plus facile d'analyser, comprendre et corriger une appli Java qu'une appli C++.
Petite question: Combien de règles faut-il respecter pour faire un "bon" programme C++ ? Et Java ?
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager