Pour revenir au sujet de depard voici une FAQ de Bjarne Stroustrup
http://www.research.att.com/~bs/bs_faq.html
trés interressant
Version imprimable
Pour revenir au sujet de depard voici une FAQ de Bjarne Stroustrup
http://www.research.att.com/~bs/bs_faq.html
trés interressant
?? comment tu définis un constructeur pas defaut?
Et puis, suffit de faire ça + std::fill, et c'est réglé.
Arrêtez de chipoter, quand même ;)
Et puis je ne vois pas ce que les flux du C++ ont en moins que ceux du C...
M'enfin, vous verrez bien avec l'expérience ce qu'offre le C++ par rapport au C.
Si ta classe s'appelle Maclasse, il suffit de fournir un constructeur qui ne prend aucun argument, de la forme Maclasse() donc. C'est ça, un constructeur par défaut.Citation:
Envoyé par reptils
On peut aussi fournir un construteur qui prend des arguments, mais qui ont des valeurs par défaut. Il sera appelé en tant que constructeur par défaut dans ce cas là.
??Citation:
Envoyé par Alp
lol, même reponseCitation:
Envoyé par Alp
Citation:
Envoyé par Mongaulois
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <algorithm> #include <iostream> using namespace std; int main() { int* array = new int[15]; fill(array, array+15, 2); for(int i = 0; i<15; i++) { cout << array[i] << endl; } return 0; }
euh... dsl je ne voit pas se quoi tu parle. J'ai pas du tout suivre...Citation:
Envoyé par Alp
Comment coderai tu avec les flux ce formatage :
sur une ligne :
- un flotant sur 10 caratère avec 3 chiffre aprés la virgule
- un entier sur 8 caratère
- un espace suivant d'un entier sur 9 caratere avec des 0 ala place des espaces
Ca c'est pour l'initialisation d'un tableau, pour reptils.
Pour les flux, tu n'as jamais consulté la doc des streams de la SL ?
Tu peux faire tout ça avec setw, setfill, ...
Ca peut t'intéresser : http://www.cppreference.com/io_flags.html#format_flags
je dis pas qu'on ne peut pas faire la meme chose en c++ mais juste que c'est moins pratique.
EDIT: ce serait pas plutot fill(array, array+14, 2); ?
Mouais. Enfin c'est super lourd.Citation:
Envoyé par Alp
C'est quand même plus rapide :
Code:
1
2
3
4
5
6 char ligne[1024]; float f =23.5689; int a = 10; int b = 23; sprintf(ligne,"% 10.3f% 8d %09d",f,a,b);
C'est plus rapide mais c'est beaucoup moins type-safe.
Non, c'est bien +15.Citation:
Envoyé par reptils
Super pratique à lire aussi :roll:
Pour répondre à ta question, oui on peut le faire en C++ ;)
Ca ne tient qu'à toi de créer des raccourcis pour ce genre de choses afin de rendre plus facile à utiliser la chose.
Boost.Format fournit ce qu'il faut pour manipuler plus facilement en C++.
Mais en C++ standard tu disposes cependant de ce qu'il faut.
C'est une question de goût après.
pour comparait comment ecrivez vous
avec les flux??Code:
1
2
3
4
5 char ligne[1024]; float f =23.5689; int a = 10; int b = 23; sprintf(ligne,"% 10.3f% 8d %09d",f,a,b);
Citation:
Envoyé par Mongaulois
http://c.developpez.com/faq/cpp/?pag...GS_convertform
Mouais... :
Et fonctionne aussi pour tous les objets où l'on redéfini l'opérateur << avec les flux (on est donc pas limité au seul %d, %f... de sprintf)Code:
1
2
3 std::ostringstream oss; oss <<f<<" "<<a<<" "<<b; return oss.str();
ben non justement.Citation:
Envoyé par millie
Ce qui sortira n'aura pas le même format
@ millie et Mongaulois : il suffit d'utiliser les manipulateurs pour formater ... cf l'url que j'ai donné plus tôt.
C'est plus verbeux, mais au moins c'est beaucoup moins obscur que les formatteurs C, et on ne passe pas une heure à chercher le bon. Et puis rien ne t'empêche d'écrire ton propre truc avec la syntaxe que tu préfères, comme le fait boost.format.Code:
1
2
3
4 std::ostringstream oss; oss << std::setw(10) << std::setfill(' ') << std::setprecision(3) << std::fixed << f << " " << std::setw(8) << std::setfill(' ') << a << " " << std::setw(9) << std::setfill('0') << b;
Je demande juste pour comparait les code, que quelqu'un qui connait bien les flux traduise mon code avec les même formatage.Citation:
Envoyé par Alp
Merci :king:. Je voulais montrer un exemple des deux methodes.Citation:
Envoyé par Laurent Gomila
Aprés à chaqu'un de choisir.
Dans la FAQ de Bjarne Stroustrup
il y as plusieur points trés interressant sur le c et le c++ :
Is C a subset of C++?
What is the difference between C and C++?
Do you really think that C and C++ could be merged into a single language?
avec un lien sur les imcompatibilités entre le C et le C++.
Cela donne à refléchire...
faut arreter la mauvaise foi la....Citation:
Envoyé par Laurent Gomila
Pourquoi ?Citation:
Envoyé par reptils
c'est écrit en grasCitation:
Envoyé par Alp
Ah mais là je suis désolé, la syntaxe de printf est très déroutante, en particulier dans un cas comme celui dont on parle.Citation:
Envoyé par reptils
Considère de manière neutre les deux façons. Sincèrement, qu'est-ce qui est le plus compréhensible à première vue, en faisant comme si on ne connaissait aucune des syntaxes ?
Bon de toute manière c'est très subjectif. (Trop ?)
mouais je pense... mais bon je remet rien en cause pour le c++, c'est juste un manque d'habitude peut etreCitation:
Envoyé par Alp
C'est effectivement très très subjectif, et je ne pense pas que la syntaxe d'une infime partie de la bibliothèque standard d'un langage soit vraiment représentatif pour ce qui est juger si il est bon ou pas :)
Par contre, on peut se baser sur des critères plus techniques.
Les flux du C ne permettent pas de définir de nouveaux flux, ceux du C++ oui (c'est très compliqué mais de beaux efforts ont été réalisés avec boost::iostreams).
sprintf fonctionne par dessus un tableau, bonjour les buffer overflow.
La syntaxe des streams C++ a été pensée pour être extensible à n'importe quel type, cela a mené à de belles incompréhensions (je me souviens de mes premiers cours, le prof voulait absolument qu'on s'en serve comme méthode de sérialisation - même nul comme j'étais à l'époque je me rendais bien compte combien c'était débile :)) mais dans le principe c'est tout de même un avantage.
Si je devais juger les flux du C++, je dirais qu'ils sont vraiment nuls. Mais ceux du C sont encore pires :D.
Dites. Je ne suis certes pas un pro du C, mais elle ne serait pas un peu beaucoup fausse votre ligne de format ? Ou alors le % isolé en début, c'est pour démontrer à quel point la syntaxe est obscure ?
(Je dis ça, je dis rien hein ?!)
Perso, boost.format est un bon compris entre ces deux approches.
% 8d veut dire ecrire un entier sur 8 caracteres en remplacant les vide par un espace (donc formater a gauche sur ces caractères)Citation:
Envoyé par Luc Hermitte
de même %x8d veut la même chose sauf que les vides sont remplacé par x
Oui mais ils sont extensibles et "bien conçus" (tout ça en considérant que ce que tu dis est vrai, ce qui n'est pas prouvé encore).Citation:
Envoyé par zais_ethael
La preuve, boost.iostreams permet tant de choses!
Arf. Au temps pour moi alors :oops:
En quoi ce que je dis est faux?Citation:
Envoyé par Alp
Quand je dis qu'ils sont nuls, je précise que c'est un avi subjectif. Mais j'ai de bonnes raisons de le penser, il n'y a qu'à regarder les flux dans les autres langages.
Et puis, tu trouves ça normal une biblio quasi impossible à utiliser sans faire appel à une biblio extérieure parue bien longtemps après?
Quasi impossible à utiliser ? Détaille !
Salut,
Souvent C++ est très obscur, pour faire des choses assez simples notamment dans les fameux flux.
Le C++ c'est aussi la STL. Plus boost, plus blitz, plus etc... tout un assemblage de librairies qui pour faire des choses assez simples vont vous prendre la tête.
Un ingénieur certifié conforme écrit qu'une chaîne de caractères se manipule ainsi, et les voici tous plongés derrière le clavier, pour faire comme le chef.
On peut faire deux choses avec le C++, soit de la didactique, soit des applications.
Concernant les applications le C++ n'est qu'un langage parmi les autres qu'il faut savoir choisir à bon escient.
Se borner à un seul langage que l'on sacralise, c'est bon pour les novices de l'informatique...
Ha ben non, ça c'est pas possible. Faut avoir essayé pour comprendre :) Vu que tu as l'air sceptique je t'y encourage.Citation:
Envoyé par Alp
Ce que je voulais dire, c'est comment ça "impossible à utiliser" ?Citation:
Envoyé par zais_ethael
Explique.
Da par la complexité du système. Ca n'a strictement rien à voir avec boost::iostreams, la il est obligatoire de gérer un buffer dont on se fout un peu, l'interface à respecter est loin d'être conçue de manière logique, les (rares) tutos que j'ai pu croiser s'efforcent tant bien que mal de faire comprendre le fonctionnement mais sans y parvenir,... Non, sérieux, c'est pas simple.Citation:
Envoyé par Alp
Dans la partie Do you really think that C and C++ could be merged into a single language?
il dit :
"I think that it would be a very good thing for the C/C++ community if they were."
Je suis plustôt d'accord avec lui, et ne voit pas l'intérêt de les séparer...
Je pense qu'il faut les rassembler et différencier ces deux "style" de programmation (ce qui n'est pas évident). Ce qui rendrais C++ plus fort et plus simple pour tout le monde.