EXEMPLE (TOUT BETE) DE CLASS POUR LES NEOPHYTES

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 7 déc. 2003 à 20:50
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005 - 9 déc. 2003 à 16:39
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18501-exemple-tout-bete-de-class-pour-les-neophytes

BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
9 déc. 2003 à 16:39
djl => bien d'accord, mais on peut qd meme bien isoler !! :)
cs_Bki Messages postés 32 Date d'inscription vendredi 18 janvier 2002 Statut Membre Dernière intervention 25 mai 2004
9 déc. 2003 à 16:02
arf sorry, les réflexes Java :D
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
9 déc. 2003 à 15:49
vObjects ==> je trouve dommage que pour coder pratique on soit souvent obliger de melanger c & c++ (procedurial et objet) ce qui est une mauvaise chose
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
9 déc. 2003 à 13:59
Bki >>

const unsigned MAX=100;
=> tu peux le mettre en static private dans ta classe

Ballon ballonDeFoot new Ballon();
> c quoi ca ??????????

Ballon ballonDeFoot
ou
Ballon* ballonDeFoot = new Ballon(); (de pas oublier le delete, acces avec ->)
vObjects Messages postés 17 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 29 décembre 2003
9 déc. 2003 à 12:19
Bki, reli ton main(), tu vas avoir des erreurs à la compilation ...
*
->
delete XXX;
etc ...

Si vous voulez coder OO en C++ alors utiliser les class sinon, allez
faire du 'pseudo-objet' en C avec des structures et arrêtez avec tout ca, vous allez mêler tous les nouveaux/elles ... struct, class, struct, class, ...

Si vous voulez un 'BON' cours sur le C/C++ allez voir ca>
http://www.developpez.com/c/tutcpp/book1.php

Bki> des exemples de class et tout le tralala y sont ...

c'est complet comme cours, en francais, détaillé, facile à comprendre, avec exemples, etc ... etc ... etc ...

et aussi, Bki, je peut comprendre que ca fait longtemp toi et le C++ mais, ton exemple contient des tonnes d'erreurs ... ca aussi c'est affreux =P(conio.h)

maintenant,
bye bye!
zinotron Messages postés 65 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 11 septembre 2004
9 déc. 2003 à 07:44
eh beh, je pensais pas qu'un simple ptit bout de code comme ca pouvaios faire couller autant d'encre ...
cs_Bki Messages postés 32 Date d'inscription vendredi 18 janvier 2002 Statut Membre Dernière intervention 25 mai 2004
9 déc. 2003 à 06:42
C'est débile de dire qu'on peut faire la même chose avec une struct. En C++, la seule différence entre une classe et une structure, c'est que les membres sont par défaut en privé dans une classe, et en public dans une structure.

Donc, tout ce qu'on peut faire avec une classe, on peut le faire avec une structure, et vice-versa.

Il faut aussi prendre l'habitude d'en mettre en max en privé, pour éviter de les modifier d'une façon déconseillée. Par exemple, si j'ai une classe horloge avec des champs heure, minute, seconde, c'est bien mieux de ne pouvoir modifier ces champs que via un setMinute(unsigned nb) par exemple, sinon on arrivera avec une montre affichant 14h117 et 24s. D'où l'intérêt d'utiliser un set qui contrôle le changement.
Vous me direz "oui mais ici c'est pas important". C'est juste une bonne habitude à prendre. Et puis, ceux qui utilisent une classe ont (ou devraient) avoir le réflexe d'utiliser ces get et set, et non les champs directement. Donc il faut leur odnner ce qu'ils attendent.

L'initiative de ce code est louable, mais c'est un très mauvais exemple de classe, puisque c'est quelque chose qui ne s'applique absolument pas à la programation orientée objet. Pour un truc comme ça, on utilise des variables. Simplifier un concept, c'est bien, mais il faut éviter de complètement le dénaturer.
Pour un exemple de classe, j'aurais plutôt fait:

#include
using namespace std;

const unsigned MAX=100;

class Ballon {
public:
Ballon (unsigned =0);
Ballon (const &Ballon)
unsigned getPression ();
void setPression (unsigned);
void gonfler (int);
void crever ();
private:
unsigned pression;
};

Ballon::Ballon (unsigned pres) {
pression = pres;
}

unsigned Ballon::getPression () {
return pression;
}

void Ballon::setPression (unsigned nb) {
if (nb > MAX) cerr << "le ballon exploserait" << endl;
else pression += nb;
}

void Ballon::gonfler (int nb) {
if (pression+nb > MAX) cerr << "le ballon exploserait" << endl;
else pression += nb;
}

void Ballon::crever () {
pression = 0;
}

le main s'écrirait
int main() {
Ballon ballonDeFoot = new Ballon();
ballonDeFoot.gonfler (85);
cout << "Le ballon est gonflé à " << ballonDeFoot.getPression() << endl;
return 0;
}

Bon, j'ai pas compilé, et le C++, ça fait longtemps que j'en ai plus fait, alors soyez indulgent :)

Et pour êter un peu plus complet, on mentionne l'écriture du constructeur qui peut se faire comme suit :
Ballon::Ballon (unsigned pres) : pression(pres) {}

Ca c'est un exemple tout aussi simple et qui illustre ne dénature pas trop la POO. J'ajouterais qu'il a l'intérêt d'utiliser des bibliothèques standards et portables, et pas cet affreux conio.h.

Ce serait bien que quelqu'un prenne un jour la peine d'écrire un vrai exemple sympa mêlant 2 ou 3 classes relativement simples et BIEN ECRITES. Je ne prétends pas être le meilleur pour le faire, mais je peux y penser :)
vObjects Messages postés 17 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 29 décembre 2003
9 déc. 2003 à 05:33
et j'oubliait, djl, si tu préfère utiliser les structures de facon semblable au class alors va coder en C et oublie le C++ ...

Moi personnellement, l'interêt que je voit dans cette exemple est que ca permet de montrer aux 'débutants' comment créer une class de facon simple et rapide.

Sachez aussi que de mettre une variable 'public' dans une class n'est pas mortel, tout dépend des besoins et de l'utiliter de cette dernière!

Bye!
vObjects Messages postés 17 Date d'inscription samedi 11 octobre 2003 Statut Membre Dernière intervention 29 décembre 2003
9 déc. 2003 à 05:28
Dite, j'ignore si vous le savez mais, class & struct == 2 et non 1 ... c'est pas pareil du tout ... alors si vous parlez de class, oubliez les struct hein! c'est stupide de comparer les 2 ...
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
8 déc. 2003 à 19:35
Au moins, faut voir l'intêret pratique (quand je pense aux deux années que j'ai passée à me demander qu'est-ce qu'une classe et à quoi ça servait... *snif*...)
Mais c'est vrai que a et b en private ça le fait mieux (avec des fonctions style GetA() ou SetA(int na))...
Saros
zinotron Messages postés 65 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 11 septembre 2004
8 déc. 2003 à 18:04
en effet, ca montre son utilisation (de base)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
8 déc. 2003 à 13:26
et tu me demandais ca par rapport a la remarque que j'avais fait ?
un des principe de la poo c'est l'encapsulation avec attribut invisibles donc je voi pas comment faire une class ou tout est public peut montrer ce qu'est la poo, de plus ca ne montre pas l'interet d'une class vu qu'on peut faire la meme chose avec une simple struct
bruniouze Messages postés 17 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 9 décembre 2003
8 déc. 2003 à 09:36
j'avais écrit un message et il a disparu (je demandais a djl s'il savait ce qu'est la programmation orientée objet)
zinotron Messages postés 65 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 11 septembre 2004
7 déc. 2003 à 23:01
bruniouze, rien.
je ne comprend pas ta question (j'ai dit qqch ?)
bruniouze Messages postés 17 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 9 décembre 2003
7 déc. 2003 à 22:55
zinotron qu'est ce que j'ai fait?
zinotron Messages postés 65 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 11 septembre 2004
7 déc. 2003 à 22:42
tiens ca marche comme ca la vie :p
merci de l'info
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
7 déc. 2003 à 22:35
ok, si c'est pour montrer comment ca marche , met au moins a et b en private et fait des accesseurs

on peut mettre des methodes dans une struct;) esaye ca :
#include
struct add
{
int a,b;
int _add();
};

int add::_add()
{
return a+b;
}

void main()
{
add a={4,5};

cout<<a._add()<<endl;


}
zinotron Messages postés 65 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 11 septembre 2004
7 déc. 2003 à 22:23
tu sais koi ?
on peut faire pareil avec un calculatrice :p
ca sert a montrer comment ca marche.
la je dis peut etre une connerie, mais je ne crois pas qu'on puisse declarer des fonction dans des structs
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
7 déc. 2003 à 20:50
je vois pas l'interet, on peut faire la meme chose avec une struct
Rejoignez-nous