OVH Cloud OVH Cloud

Newbies en C++ !

437 réponses
Avatar
Fuxy
Bonsoir à tous,


Voilà, il y a encore 1 mois, j'étais sous Windoz XP et je "bidouillais"
en VisualBasic 6.0

Depuis je suis passé sous Linux Suse 9.1 et je souhaiterais continuer à
"bidouiller", je ne cherche pas à développer des applications énormes,
mais juste des petits trucs pour m'amuser.

J'ai vu que sous Linux, le C++ avait l'air très répendu, j'ai donc
installé KDevelop qui permet de programmer en C++.

Et voilà, j'en suis à ce stade, j'ai acheté un bouquin sur le C++, j'en
suis à la page 10 ! et je me dis que ça a l'air un peu compliqué ...

Pouvez vous me conseiller ? est ce que le C++ est un bon choix pour moi
qui n'y connait rien ?

Merci pour votre aide.

A Bientot

--
Mail envoyé depuis Thunderbird
Sous Linux Suse 9.1 Pro

10 réponses

Avatar
drkm
Fabien LE LEZ writes:

On Fri, 13 Aug 2004 01:39:38 +0200, drkm :

Malheureusement, je dois bien avouer que cela ferait du bien au
domaine.


Oui, mais là il y a un problème éthique


Que ce soit clair : lorsque je dis « Malheureusement, je dois bien
avouer que ... », il ne s'agit en aucun cas de cautionner une telle
pratique


Supposons que toute personne veuillant apprendre le C++ vienne
demander conseil sur fclc++. Les "mauvais bouquins" dont on parle ne
se vendront plus, et seront mis au pilon. L'autodafé capitaliste au
lieu de l'autodafé religieux, en somme.

Le problème éthique dont je parle est assez simple à énoncer : faut-il
sacrifier des élèves en les laissant acheter de mauvais bouquins, ou
vaut-il mieux sacrifier les mauvais auteurs en dirigeant les élèves
vers les bons ?


Je ne parlerais pas alors d'autodaffé. Plutôt de quelque chose
comme une sélection à laquelle on peut décider de ne pas adhérer.
L'autodaffé empêche quiconque de lire certains livres, puisqu'ils sont
physiquement détruits. Critiquer de manière objective (ou non,
d'ailleurs) un livre, et le déconseiller, n'est absolument pas la même
chose.

Et si l'auteur ne peut en vivre, il lui faudra se recycler. Que sa
production soit ou non de qualité, d'ailleurs.

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html




Avatar
Christophe de VIENNE
Fabien LE LEZ wrote:
On Fri, 13 Aug 2004 11:44:14 +0200, :


Python a une particularité : il OBLIGE à indenter le code proprement


Je pense qu'un langage qui impose ses normes d'indentation me
gonflerait profondément, mais c'est sans doute un plus pour un
débutant...


On s'y fait très vite. Il faut juste s'habituer à utiliser les fonctions
d'indentation de blocs entier de ton éditeur parce que sinon dès que tu
ajoute un if: c'est l'enfer.

--
Christophe de Vienne


Avatar
Laurent Deniau
drkm wrote:
Laurent Deniau writes:


Il
me semble qu'a *l'exterieur de la definition d'une classe* on peut
utiliser partout un const int a la place d'un enum. La reciproque
n'est biensur pas vraie.



Si tu parles de la réciproque « enum à la place d'un int », alors
si. Une énumération est implicitement convertible en entier, non ?


enum { e=1 };
const int a=1;

const int *p = &a; // ok
const int *q = &e; // boum

Donc la ou a passe, e ne passe pas necessairement...

Pour ce qui est de l'utilisation d'un entier à la place d'une
énumération, cela me semble bizarre. Ne t'emmêles-tu pas simplement
les pinceaux avec leur utilisation commune en tant que « integral
constant-expression » ?


J'ai parler de comportement. Je n'ai pas dit qu'un const int etait un
enum. Je demandais pour infirmer ma conjecture un exemple qui montre un
cas d'utilisation en C++ ou un enum ne peut pas etre substitue par un
const int. En C on a le cas trivial:

{ // Ok C++ pas C
const int size = 10;
int array[size];

// ...
}

La particularite C++ est que const int peut etre utilise dans une
expression integrale constante, a condition que son initialisation soit
elle meme une expression integrale constante, ce n'est pas le cas en C.

Je n'ai pas encore repondu a James parce que son post est long et que je
n'ai pas le temps maintenant...

a+, ld.


Avatar
Gabriel Dos Reis
Alexandre Bacquart writes:

| Fabien LE LEZ wrote:
|
| > A condition de vouloir rester débutant. J'ai des doutes sur la
| > formation qu'apporte l'apprentissage du Basic.
|
| Il a le mérite d'être facile à apprendre pour les autoditactes. Il
| apporte les bases de la programmation,

Les bases de la programmation ? Lesquelles ?

| de la manière la plus simple
| possible. Introduction de concepts dont peu de langages peuvent se
| passer : les variables, les structures de contrôle, les
| fonctions...
^^^^^^^^^

Là tu parles d'un dérivé hydro-carbonique, pas de BASIC.

-- Gaby
Avatar
Gabriel Dos Reis
writes:

[...]

| Dans la pratique, quand un script commence à dépasser plusieurs
| milliers de lignes, il est temps de penser à C++.

pour le convertir à des millions de lignes C++ ?

-- Gaby
Avatar
drkm
Laurent Deniau writes:

drkm wrote:

Laurent Deniau writes:

me semble qu'a *l'exterieur de la definition d'une classe* on peut
utiliser partout un const int a la place d'un enum. La reciproque
n'est biensur pas vraie.


Si tu parles de la réciproque « enum à la place d'un int », alors
si. Une énumération est implicitement convertible en entier, non ?


enum { e=1 };
const int a=1;

const int *p = &a; // ok
const int *q = &e; // boum

Donc la ou a passe, e ne passe pas necessairement...


Mais c'est encore moins vrai dans l'autre sens, non ? Puisqu'il n'y
a pas de conversion implicite des entiers vers les énumération :

~> cat fclcxx.cc
enum E {
e = 0
} ;
int monI = e ;
E monE = 0 ;
~> g++ -o fclcxx.o -c fclcxx.cc -Wall -ansi -pedantic
fclcxx.cc:5: error: invalid conversion from 'int' to 'E'

Pour ce qui est de l'utilisation d'un entier à la place d'une
énumération, cela me semble bizarre. Ne t'emmêles-tu pas simplement
les pinceaux avec leur utilisation commune en tant que « integral
constant-expression » ?


J'ai parler de comportement. Je n'ai pas dit qu'un const int etait un
enum. Je demandais pour infirmer ma conjecture un exemple qui montre
un cas d'utilisation en C++ ou un enum ne peut pas etre substitue par
un const int.


Cfr. l'exemple ci-dessus, en remplaçant le litéral '0' par une
variable de type « int const », ce qui revient à la même erreur.

En C on a le cas trivial:

{ // Ok C++ pas C
const int size = 10;
int array[size];

// ...
}


Tu veux dire que ceci n'est pas du C ? J'aurais dit qu'à l'inverse
du C++, en C, size peut même n'être pas constant. Cfr. les VLAs.
Non ?

La particularite C++ est que const int peut etre utilise dans une
expression integrale constante, a condition que son initialisation
soit elle meme une expression integrale constante, ce n'est pas le cas
en C.


Il s'agit alors lui-même d'une « integral constant-expression ».
Cfr. 5.19 :

« An integral constant-expression can involve only literals,
enumerators, const variables or static data members of integral
or enumeration types initialized with constant expressions,
non-type template parameters of integral or enumeration types,
and sizeof expressions. »

Mais peut-être n'ai pas tout à fait compris ce que tu voulais dire ?

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html



Avatar
Gabriel Dos Reis
"Alain Naigeon" writes:

| "Gabriel Dos Reis" a écrit dans le message
| news:
|
| > (3) Imagine quelqu'un qui veut apprendre le français, mais se refuse
| > à toute construction standard et préfère ses onomatopées maison
| > au prétexte que l'homme de la pierre taillée faisait de même.
|
| Tss... là tu déformes ; tu es pour l'usage des expressions standard
| sans compréhension de leurs éléments (provisoirement). D'autres
| pensent que c'est bien - en tout cas pas nuisible ! - de connaître
| les mots avant de les assembler. Ce débat entre lecture globale
| ou pas a déjà eu lieu, avec les résultats qu'on connaît.

C'est là que tu déformes : être pour un apprentissage des
constructions idiomatiques ne veut pas dire qu'on est pour une lecture
globale.

| Tu parles couramment C++, et tu crois, en toute bonne foi, que
| pour y arriver il n'y a *que* la méthode globale d'apprentissage,
| qui ressemble évidemment à ta pratique actuelle.
| Mais :
| Comment peux-tu dire que toute autre méthode conduit à ne
| pas comprendre le langage et à l'enfermer dans son passé,

J'ai posé deux fois la question : que proposes-tu à la place
std::string et std::vector<>. Je n'ai pas eu de réponse. Juste de la
rhétorique. Est-ce à dire que l'autre tenant faite juste de la
figuration ?

| alors que ceux-là même qui l'ont fait évoluer ont été, évidemment,
| formés sans les outils qu'ils ont eux-même inventés par la suite ?
| Il y a comme un bug dans ce beau raisonnement

Peut-être qu'il y a un bug, mais c'est sans importance pour le sujet
dont il est question ici : que proposes-tu à la place de std::string
et std::vector<> ? Note bien que je ne prones pas une « lecture
globale » comme tu as tenté de le faire croire.

-- Gaby
Avatar
Gabriel Dos Reis
"Alain Naigeon" writes:

| "Gabriel Dos Reis" a écrit dans le message
| news:
|
| > Quelles sont tes alternatives à std::vector<> et std::string?
|
| L'énorme et intéressante quantités de choses qui servent
| à les écrire :-o

Mais encore.

| *je* ne suis pas partisan de les ignorer, simplement je trouve
| provocant - et en tout cas questionnable - la position consistant
| à dire qu'il est démodé d'enseigner comment ça marche !

T'aurais pris un coup de canicule ?

Je ne dis pas qu'il est démodé d'enseigner comment ça marche. Je dis
que pour apprendre aux débutants à programmer en C++, ce ne devrait
pas être la première chose à faire.

| Oui, je sais... " à un *dé-bu-tant*". Ok, eh bien, Wittgenstein a
| dit, avec pertinence: "Le vrai sens d'un théorème, c'est sa preuve".

Même si ce brave monsieur avait raison, cela n'a aucune espèce
d'importance ici : nous ne parlons pas de théorème.

| Tu ne sais pas ce qu'est une chose avant de savoir "comment ça
| marche".

C'est pour respecter ce principe que tu apprendrais au débutant -- qui
veut juste à apprendre à programmer en C++ -- de commencer d'abord en
binaire, plus en langage d'assemblage, puis en C en enfin en C++ sans
doute ?

| Tu peux aussi enseigner, en conduite accompagnée, en expliquant
| à chaque instant vers où, et de combien, il faut tourner le volant.

Quel est le rapport avec la choucroute ?

-- Gaby
Avatar
Gabriel Dos Reis
writes:

| Laurent Deniau wrote in message
| news:<cfai51$po6$...
| > Fabien LE LEZ wrote:
| > > On Tue, 10 Aug 2004 14:54:10 +0200, Fabien LE LEZ
| > > :
|
| > >>Est-ce que C gère correctement "const" ?
|
| > > Note : il s'agit bien d'une question. J'ai vraiment de grosses
| > > lacunes en C (ou, pour prendre le problème à l'envers, j'ai quelques
| > > vagues connaissances en C ;-) ).
|
| > Pour repondre, il faudrait d'abord definir ce que l'on attend de const
| > dans le language et que signifie gerer "correctement" const. Hormis
| > ces deux considerations, const en C est plus simple et plus logique
| > (pas de cas particulier de sa semantique), mais ca ne repond en rien a
| > la question :-).
|
| Comme j'ai déjà dit, les deux langages sont prèsqu'identique dans leur
| traitement de const, dans les parties communes. (En fait, de tête, je
| crois qu'ils y sont rigueureusement identiques.

Non, ils ne ne le sont pas. En C, on est toujours obligé d'utiliser
des macros ou des enums pour avoir des expressions constantes
entières. Je pense que'une sémantique raisonablement utile de const
devrait couvrir les expressions constantes entières.

En fait, j'irais même à dire que la sémantique de const en C rend
cette fonctionnalité presque initule.

-- Gaby
Avatar
Gabriel Dos Reis
Jean-Marc Bourguet writes:

| writes:
|
| > Laurent Deniau wrote in message
| > news:<cfai51$po6$...
| > > Fabien LE LEZ wrote:
| > > > On Tue, 10 Aug 2004 14:54:10 +0200, Fabien LE LEZ
| > > > :
| >
| > > >>Est-ce que C gère correctement "const" ?
| >
| > > > Note : il s'agit bien d'une question. J'ai vraiment de grosses
| > > > lacunes en C (ou, pour prendre le problème à l'envers, j'ai quelques
| > > > vagues connaissances en C ;-) ).
| >
| > > Pour repondre, il faudrait d'abord definir ce que l'on attend de const
| > > dans le language et que signifie gerer "correctement" const. Hormis
| > > ces deux considerations, const en C est plus simple et plus logique
| > > (pas de cas particulier de sa semantique), mais ca ne repond en rien a
| > > la question :-).
| >
| > Comme j'ai déjà dit, les deux langages sont prèsqu'identique dans leur
| > traitement de const, dans les parties communes. (En fait, de tête, je
| > crois qu'ils y sont rigueureusement identiques. Et que c'était en tout
| > cas l'intention du comité de normalisation C++ et avant de Stroustrup
| > qu'ils le soient.) En revanche :
|
| De memoire, les regles pour const dans des pointeurs vers pointeurs
| sont moins strictes (mais aussi sures) en C++ qu'en C.

En C, une variable entière déclarée const et initialisée avec une
constant entière n'est pas une expression constante entière.

-- Gaby