Aller au menu - Aller au contenu

Classes et pointeurs

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2  3  Suivante
Pseudo Commentaire
Page Précédente  1  2  3  Suivante
Hors ligne Marsignou # Posté le 07/03/2009 à 20:44:17
Pense mais plaît
Avatar
Groupe : Bannis

parfait

Image utilisateur
Image utilisateur
 
Hors ligne Hakim-3i # Posté le 14/06/2009 à 01:01:48
Avatar

Ville : Oran
Pays : Algérie
Études : USTO

Bravo M@teo toujours à la hauteur
j'avoue que c'est le premier chapitre que j'ai lu deux fois pour bien comprendre :D
mais c'est tes facile a la fin il faut un peut de l'imagination :p

Edit: Note 19.99/20 ^^
Hors ligne BeRReGoN # Posté le 06/08/2009 à 08:38:03
Avatar

J'adore tes tutoriels, je m'étais commandé quelques livres pour apprendre le C++ mais entre temps j'étais tombé sur tes cours et c'est vraiment parfait pour bien débuter.

Dans ce chapitre par contre, j'ai trouvé une contradiction je crois:

Dans l'info en jaune, tu dis que les attributs d'objets de même classe sont accessibles :

Citation
on est dans une méthode de la classe Personnage, et on a le droit d'accéder à tous les éléments (même privés) d'un autre Personnage.


mais dans la partie 1 sur les classes tu disais:

Citation
On ne peut pas modifier directement la vie de la cible en faisant cible.m_vie car la cible est un AUTRE objet (même s'il est aussi issu de la classe Personnage). On n'a le droit d'accéder qu'aux éléments publics de cet autre objet, donc à ses méthodes.
Hors ligne archendel # Posté le 11/08/2009 à 16:30:27

Bonjour à tous !
J'ai un problème sous Visual C++...
J'ai, dans ce chapitre, bien respecté tous ce qui était mraué mais lorsque je compile, ça me donne des tas d'erreur...
Alors j'ai crus que j'avais dut me tromper sur 2 ou trois choses donc j'ai telechargé le fichier RPG de M@teo.
Je l'ouvre je compile mais pareil ça me donne des tas d'erreurs :

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

------ Début de la génération : Projet : monprojetC++, Configuration : Debug Win32 ------
Compilation en cours...
Personnage.cpp
.\Personnage.cpp(1) : warning C4627: '#include <iostream>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
Ajoutez la directive à 'stdafx.h' ou régénérez l'en-tête précompilé
.\Personnage.cpp(69) : error C2065: 'cout' : identificateur non déclaré
.\Personnage.cpp(70) : error C2065: 'cout' : identificateur non déclaré
monprojetC++.cpp
.\monprojetC++.cpp(2) : warning C4627: '#include "Personnage.h"' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
Ajoutez la directive à 'stdafx.h' ou régénérez l'en-tête précompilé
.\monprojetC++.cpp(11) : error C2065: 'Personnage' : identificateur non déclaré
.\monprojetC++.cpp(11) : error C2146: erreur de syntaxe : absence de ';' avant l'identificateur 'david'
.\monprojetC++.cpp(11) : error C2065: 'david' : identificateur non déclaré
.\monprojetC++.cpp(11) : error C3861: 'goliath' : identificateur introuvable
.\monprojetC++.cpp(14) : error C2065: 'goliath' : identificateur non déclaré
.\monprojetC++.cpp(14) : error C2228: la partie gauche de '.attaquer' doit avoir un class/struct/union
le type est ''unknown-type''
.\monprojetC++.cpp(14) : error C2065: 'david' : identificateur non déclaré
.\monprojetC++.cpp(15) : error C2065: 'david' : identificateur non déclaré
.\monprojetC++.cpp(15) : error C2228: la partie gauche de '.boirePotionDeVie' doit avoir un class/struct/union
le type est ''unknown-type''
.\monprojetC++.cpp(16) : error C2065: 'goliath' : identificateur non déclaré
.\monprojetC++.cpp(16) : error C2228: la partie gauche de '.attaquer' doit avoir un class/struct/union
le type est ''unknown-type''
.\monprojetC++.cpp(16) : error C2065: 'david' : identificateur non déclaré
.\monprojetC++.cpp(17) : error C2065: 'david' : identificateur non déclaré
.\monprojetC++.cpp(17) : error C2228: la partie gauche de '.attaquer' doit avoir un class/struct/union
le type est ''unknown-type''
.\monprojetC++.cpp(17) : error C2065: 'goliath' : identificateur non déclaré
.\monprojetC++.cpp(18) : error C2065: 'goliath' : identificateur non déclaré
.\monprojetC++.cpp(18) : error C2228: la partie gauche de '.changerArme' doit avoir un class/struct/union
le type est ''unknown-type''
.\monprojetC++.cpp(19) : error C2065: 'goliath' : identificateur non déclaré
.\monprojetC++.cpp(19) : error C2228: la partie gauche de '.attaquer' doit avoir un class/struct/union
le type est ''unknown-type''
.\monprojetC++.cpp(19) : error C2065: 'david' : identificateur non déclaré
.\monprojetC++.cpp(23) : error C2065: 'david' : identificateur non déclaré
.\monprojetC++.cpp(23) : error C2228: la partie gauche de '.afficherEtat' doit avoir un class/struct/union
le type est ''unknown-type''
.\monprojetC++.cpp(25) : error C2065: 'goliath' : identificateur non déclaré
.\monprojetC++.cpp(25) : error C2228: la partie gauche de '.afficherEtat' doit avoir un class/struct/union
le type est ''unknown-type''
Arme.cpp
.\Arme.cpp(1) : warning C4627: '#include <iostream>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
Ajoutez la directive à 'stdafx.h' ou régénérez l'en-tête précompilé
.\Arme.cpp(27) : error C2065: 'cout' : identificateur non déclaré
Génération de code en cours...
Le journal de génération a été enregistré à l'emplacement "file://d:\Program Files\Programmation C++\mesprogrammes\monprojetC++\monprojetC++\Debug\BuildLog.htm"
monprojetC++ - 27 erreur(s), 3 avertissement(s)
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


Voila mes erreurs :s
En fait, sur le fichier RPG, au début je l'ouvre avec Visual C++, mais lorsque je comppile, ils me disent que j'ai oublié de mettre #include "stdafx.h" dans un de mes fichiers :s Donc je l'ai rajouté dans main.cpp(mon fichier projet), Personnage.cpp, Arme.cpp, Arme.h et Personnage.h.
C'est la seule modification que j'ai faite.
Mais ça me donne les erreurs que je vous ai marqué plus haut...
J'attend vos aides avec impatience !
Merci d'avance.
Hors ligne checktest # Posté le 26/09/2009 à 08:11:56

Je suis d'accord avec BeRReGoN, c'est contradictoire.
Hors ligne tyt # Posté le 28/09/2009 à 01:16:31

slt ,archendel je crois que le problème est du au fait que dans le personnage.h il y a absence de la librairie <string> , essaye et tu me fais savoir si ça marche
Hors ligne lolo97434 # Posté le 28/09/2009 à 11:22:46

Je suis d'accord avec checktest et BeRReGoN, j'ai tout de suite bloqué dessus quand j'ai vu tes lignes de code!
Apparemment je suis pas le seul à ne pas avoir compris l'exception.

Quand, on a implémenté la methode 'attaquer' de Personnage, on a appelé la méthode 'recevoirDegats' de l'objet cible pour lui enlever des points de vie, sa 'm_vie' n'étant pas accessible car private.

Alors pourquoi ici, on peut accéder aux attributs?!
Des explications s'imposent professeur... Ou alors ceux qui ont compris, aidez nous svp!
Hors ligne tecrob93 # Posté le 03/10/2009 à 04:22:11
Never think before doing.

lolo97434, checktest, BeRReGoN, je dois vous dire que c'est la raison la plus simple du monde. Cela se déroule en trois étapes pour le cas que vous connaissez :

1. Appeler la fonction "attaquer"...

2. ... qui appelle la fonction "recevoirDegats"...

3. ... qui modifie la vie de la cible.

Ensuite, il s'agit du cas qui vous questionne qui lui, se déroule en seulement 2 étapes :

1. On veut copier le personnage A pour créer un personnage B...

2. ... et on "jette un coup d'oeil" à l'objet de départ pour pouvoir le copier.

En gros, on peut REGARDER les attributs/méthodes d'un objet DE LA MÊME CLASSE pour la copie. On pourrait comparer ça à un cours de maths : Vous êtes nul en maths. Un ami à vous (assis à votre droite) vous laisse regarder sur sa feuille, à la condition qu'il soit sur de ne pas se faire prendre. Donc, le fait de copier une classe est considéré comme "le professeur qui regarde ailleurs" et le fait de copier les méthodes/attributs de l'autre objet est l'équivalent de "copier sur la feuille de l'autre".

Récapitulons :

1. C'est un examen, le prof regarde, vous devez tout faire par vous même. / Vous utilisez une méthode, vous devez utiliser des méthodes pour voir les attributs.

2. C'est toujours le même examen, le prof ne regarde pas, vous pouvez copier. / Vous copiez un objet, vous pouvez voir les détails pour le copier sans vous tromper.

C'est mieux?

私はてくたつきです。
 
Hors ligne tecrob93 # Posté le 06/10/2009 à 02:54:54
Never think before doing.

En effet, le pointeur "this" peut être réellement utile lorsqu'on veut dire :

1. Utilise la méthode "utiliserObjet" en lui donnant comme paramètre un objet "Item" à partir du personnage...

2. ...qui appelle la méthode "utiliser" de l'objet en question...

3. ...qui appelle la méthode "régénère" du personnage utilisateur.

Donc, avant même d'avoir été plus loin, j'ai compris l'une des utilisations du pointeur "this". ^^ :ninja:

私はてくたつきです。
 
Hors ligne Aweb # Posté le 09/06/2010 à 20:24:02
Isépien? (Cycle préparatoir)
Avatar

Ville : Paris
Pays : France métropolitaine
Études : ISEP

Ce chapitre n'aborde pas du tout le cas où le pointeur "pioche" dans une série d'éléments et où on ne doit pas faire delete dans le destructeur, c'est dommage...

Résistons aux signatures bidons!
 
Hors ligne dearth # Posté le 08/08/2010 à 13:57:31
Developpeur Web
Avatar

Ville : Le havre
Pays : France métropolitaine

J'ai pas trop compris l'intérêt d'utiliser un pointeur dans une classe pour moi le seul changement que j'ai vu c'est

Code : C++
1
2
3
4
void Personnage::attaquer(Personnage &cible)
{
    cible.recevoirDegats(m_arme.getDegats());
}


devient :

Code : C++
1
2
3
4
void Personnage::attaquer(Personnage &cible)
{
    cible.recevoirDegats(m_arme->getDegats());
}


Enfaite je comprends pas trop le changement qu'il y aura :/

Image utilisateur
 
Hors ligne FyndWyre # Posté le 24/08/2010 à 12:39:15
Avatar

Avis : Très bon Groupe : Bannis

Dearth :

Citation
Nous vous rappelons que cet espace est réservé aux commentaires à propos des tutoriels, veillez donc à ne pas poser vos questions dans cette section.
Pour cela, rendez-vous sur le forum ! Merci.

Image utilisateur
Image utilisateur
Image utilisateur
Image utilisateur
Absent en semaine !
 
Hors ligne le_juif_noir # Posté le 27/08/2010 à 18:22:41
Avatar

Avis : Très bon

Ville : Yamoussoukro
Pays : Côte d'Ivoire
Études : INPHB

Je n'ai pas encore lu le tuto mais je sais que je vais l'adorer, puisque j'aime les manières les plus faciles d'apprendre les pointeurs qui sont très difficiles.

Développeur .NET (Windows|Web|Phone)
C#, Silverlight, WPF, WP7, ADO .NET, LINQ, ...
 
Hors ligne le_juif_noir # Posté le 30/08/2010 à 13:42:37
Avatar

Avis : Très bon

Ville : Yamoussoukro
Pays : Côte d'Ivoire
Études : INPHB

Difficile la partie sur le constructeur de copie, je comprends le but mais pas la méthode alors je relis une seconde fois pour que tout soit clair dans ma tête .Dis Mateo tu l'a comprise dès ta prémière approche :-°

Développeur .NET (Windows|Web|Phone)
C#, Silverlight, WPF, WP7, ADO .NET, LINQ, ...
 
Hors ligne Zangdaarr # Posté le 22/09/2010 à 09:59:37

Question qui est peut-être con, pourquoi n'est-il pas pertinent d'avoir plusieurs pointeurs qui pointent vers le même objet?

Dans notre cas si l'arme est identique pour 100 personnages c'est mieux d'avoir 1 arme et 100 pointeurs vers cette arme au lieu d'allouer 100 fois la mémoire pour l'arme. Bien sur, il ne faudrait pas détruire l'objet arme dans ce cas.

Sinon, j'ai du mal à voir l'intérêt d'utiliser les pointeurs pour le coup vu que tout ce qui est donné comme avantage en haut du cours peut être fait sans.

Autre question con: pourquoi ne pas utiliser de références?
Hors ligne stakanov # Posté le 01/11/2010 à 01:17:52
Vivre ou Mourir
Avatar

Avis : Très bon

Super le tutoriel bien que j'ai du relire plusieurs fois la partie sur les constructeur de copie :p

20/20 ;)

Image utilisateur
IN THE POCKET :colere2: :D Pour les fans de résident evil je crée un site sur le sujet http://bibliothequeumbrella.free.fr/
 
Hors ligne a.house # Posté le 02/01/2011 à 21:22:45
Avatar

salut j'ai une idée de faire des compétitions entre les membres de forum pour réaliser des projets.
Hors ligne amino23fr # Posté le 14/02/2011 à 06:48:48
Avatar

SVP :j'ai 2 question :
1) quand on fait une classe Arme qui est associé a Classe personnage , on est pas obligé de faire un destructeur ? moi j'ai essayé sans et avec et ça marché dans les deux cas . mais dans qu'elle cas on est obligé de faire un destructeur dans Arme?

2)a quoi ressemblereai le constructeur de copie Arme ?
j'ai essayé de le faire ça compilé mais la console est partie apres l'affichage .
j'ai fait qq chose de ce genre :
Arme:: Arme(const Arme &arme)
{
m_nom=arme.m_nom;
m_degat=arme.m_degat;
}
Merci .
Hors ligne mateurlastar # Posté le 29/03/2011 à 21:19:52
Avatar

Avis : Très bon

Moi aussi j'ai unequestion je n'est pas bien compris cette partit:
N'oubliez pas que m_arme est maintenant un pointeur !


Cela implique de changer toutes les méthodes qui l'utilisent. Par exemple:

void Personnage::attaquer(Personnage &cible)
{
cible.recevoirDegats(m_arme.getDegats());
}

... devient :

void Personnage::attaquer(Personnage &cible)
{
cible.recevoirDegats(m_arme->getDegats());
}

Notez la différence : le point a été remplacé par la flèche, car m_arme est un pointeur. Cela ne devrait pas être nouveau pour vous si vous avez bien suivi le cours jusqu'ici, mais je préfère le rappeler sait-on jamais

A quoi cela sert t'il de changer le point en une fleche?
Hors ligne Azulkb # Posté le 13/04/2011 à 16:21:30

Passionnant )
je suis un vrai débutant en c++ mais franchement c'est accessible;

cependant une question (oui peut être j'ai mal compris le chapitre sur les surcharges)

j'ai du mal a faire la différence entre

Code : C++
1
2
3
4
Object& ma_class::ma_methode(Object const &unobject) 
{  ... du code.... ; 
return *this;
}


et ceci

Code : C++
1
2
3
4
void ma_class::ma_methode(Object const &unobject) 
{ 
... du code....; 
}


car c'est un peu ce qui ma bloqué dans ce chapitre si sur le operator= et sur le chapitre précèdent sur le operator=+
Si c'est identique je préfère la deuxième version qui est bq plus clair pour moi
Hors ligne gaulois94 # Posté le 05/06/2011 à 23:29:25
Avatar

Avis : Très bon Groupe : Bannis

ben le premier renvoi un objets (sur l'ancien chapitre il renvoyais un objet de type durée) et le seconde ne renvoie rien.

imagine pour le premier que l'objet est string. La normalement tu devrais avoir tout compris.

Mes programmes créé (les tout premiers ainsi que les derniers) http://gaulois94.rd-h.fr/Programme/Programmes.zip. N'hésitez pas a me faire des commentaires.
 
Hors ligne rob9782 # Posté le 21/08/2011 à 11:20:18
Avatar

Avis : Très bon

ta methode c'est :

Code : C++
1
2
3
4
5
6
ma_class::ma_methode()
  { 
//du code 

return this;
}


et par conséquent:


Code : C++
1
Kekchose.ma_methode();


this pointe sur le kekechose :magicien:

90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.
 
Hors ligne Leazerface # Posté le 01/09/2011 à 13:54:28
Avatar

Bon, pour la surcharge de l'opérateur= on fait :
"delete m_arme;" systématiquement. Or, théoriquement rien n'empêche de faire un (constructeur de) Personnage sans arme ! Dans ce cas, on supprimerait un pointeur vide. Je ne sais pas si c'est dérangeant, mais peut-être faudrait-il tester if(m_arme!=0).
Merci :)

La culture, c'est comme la confiture, moins on en a, plus on l'étale !

Ne prenez pas la vie trop au sérieux, de toute façon vous n'en ressortirez pas vivant ;p
 
Hors ligne Thedrake # Posté le 04/09/2011 à 21:36:59
A wandering dragon.
Avatar

Petite remarque à part:

[quote]Vous vous demandez peut-être comment cela se fait qu'on puisse accéder aux attributs m_vie et m_mana du personnageACopier ? Si vous vous l'êtes demandé, je vous félicite, ça veut dire que le principe d'encapsulation commence à rentrer dans votre tête.
Eh oui, en effet, m_vie et m_mana sont privés, donc on ne peut pas y accéder depuis l'extérieur de la classe... sauf qu'il y a une exception ici : on est dans une méthode de la classe Personnage, et on a le droit d'accéder à tous les éléments (même privés) d'un autre Personnage.[/quote]

Je sais que ça n'aidera personne, mais j'ai envi de dire que tu as déjà expliqué sur un ancien chapitre qu'une méthode d'une classe peut modifier les attributs de n'importe quel objet de cette même classe, donc se poser la question ci-dessus voudrait dire qu'on à oublié des trucs qui ont été dits~ :lol:


Mise à part ça, cours sympa comme tout ceux que j'ai vu ici, cependant, j'aurais une question: ci je décide que dans mon jeu, il y ai une épée de cuivre, une d'argent et une d'or, et c'est tout, est-ce une tare de, si on copie un objet, de laisser le pointeur sur la même arme? Je trouve que cette solution est parfaitement possible dans mon cas, donc le constructeur de copie par défaut conviendrais dans cette situation.
Hors ligne cardman # Posté le 07/09/2011 à 13:41:07

Avis : Très bon

Ville : Condécourt
Pays : France métropolitaine

Bonjour tout le monde, serait-il possible de ne pas utiliser de pointeurs dans la classe mais de renvoyer les adresses des attributs de la classe pour pouvoir les modifier à l'extérieur?

Voici un support pour une éventuelle nouvelle sous-partie:
fichier point.h:
Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Point
{
    int x;
    int y;
public:
    Point(int,int);
    int *getx();//pas de const sinon cela plante à la compilation, on retourner l'adresse de x
    int *gety();//pas de const sinon cela plante à la compilation, on retourner l'adresse de y
//pas de destructeur car ni x,ni y ne sont des pointeurs
};


fichier point.cpp:
Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include "point.h"//On inclut l'entête de point.cpp
Point::Point(int _x,int _y):x(_x),y(_y)
{
//rien à faire car tout est déjà initialisé
}
int *Point::getx()//pas de const sinon cela plante à la compilation, on retourner l'adresse de x
{
    return &x;//l'adresse de x
}
int *Point::gety()//pas de const sinon cela plante à la compilation, on retourner l'adresse de y
{
    return &y;//l'adresse de y
}

fichier main.cpp:

Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <QtCore> //pour pouvoir sauvegarder les résultats
#include "point.h" //On inclut la classe Point

int main(int argc,char **argv)
{
    Point pt(0,0);
    int *a=pt.getx();//On récupère l'adresse de x
    *a=1;//On assigne 1 à la valeur à l'adresse a
    //pas de libération de mémoire car "a" est l'adresse de l'attribut x de l'objet pt
    a=pt.gety();//On récupère l'adresse de y
    *a=2;//On assigne 2 à la valeur à l'adresse a
    QFile fichier_sortie("dbg.txt");
    if(fichier_sortie.open(QIODevice::WriteOnly|QIODevice::Text))//Si le fichier a pu être ouvert en mode écriture de texte
    {
        QTextStream flux(&fichier_sortie);//Initialisation du flux de sortie sur le fichier de sortie
        flux<<QString::number(*pt.getx())<<";"<<QString::number(*pt.gety());
/*on écrit les résultats dans le fichier de sortie sous la forme x;y,
où x et y sont des nombres (ils valent 1;2), les attributs de l'objet pt sont modifiés à l'extérieur de la classe.*/
        fichier_sortie.close();//on ferme le fichier
    }
//PAS de libération de MEMOIRE de a, sinon le programme plante à l'exécution.
    return 0;//fin d'exécution
}


On évite le plus possible d'utiliser des pointeurs dans la classe.

Au niveau de l'encapsulation, c'est meilleur.

François Mercier des Rochettes.
 
Hors ligne Itch'nak # Posté le 17/09/2011 à 14:22:54
Avatar

Citation : cardman

Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <QtCore> //pour pouvoir sauvegarder les résultats
#include "point.h" //On inclut la classe Point

int main(int argc,char **argv)
{
    Point pt(0,0);
    int *a=pt.getx();//On récupère l'adresse de x
    *a=1;//On assigne 1 à la valeur à l'adresse a
    //pas de libération de mémoire car "a" est l'adresse de l'attribut x de l'objet pt
    a=pt.gety();//On récupère l'adresse de y
    *a=2;//On assigne 2 à la valeur à l'adresse a
    QFile fichier_sortie("dbg.txt");
    if(fichier_sortie.open(QIODevice::WriteOnly|QIODevice::Text))//Si le fichier a pu être ouvert en mode écriture de texte
    {
        QTextStream flux(&fichier_sortie);//Initialisation du flux de sortie sur le fichier de sortie
        flux<<QString::number(*pt.getx())<<";"<<QString::number(*pt.gety());
/*on écrit les résultats dans le fichier de sortie sous la forme x;y,
où x et y sont des nombres (ils valent 1;2), les attributs de l'objet pt sont modifiés à l'extérieur de la classe.*/
        fichier_sortie.close();//on ferme le fichier
    }
//PAS de libération de MEMOIRE de a, sinon le programme plante à l'exécution.
    return 0;//fin d'exécution
}


On évite le plus possible d'utiliser des pointeurs dans la classe.

Au niveau de l'encapsulation, c'est meilleur.


Un petit point, quand tu mets
Code : C++
1
*a=1;

Ca signifie que tu changes la variable sur laquelle pointe a.
Pour modifier l'adresse, tu dois mettre :
Code : C++
1
a=1;


Après, je réponds pas à ta question mais bon ... XD

90% of teens today would die if Facebook was completely destroyed. If you are one of the 10% that would be laughing, copy and paste this to your signature.
 
Hors ligne -Dr3ck- # Posté le 12/01/2012 à 19:34:30
///Testostérone\\\
Avatar

C'est fou ! Je comprends tout ! Tu explique tellement bien *_* Merci mille fois Mateo21 !

U MAD BRO ? Image utilisateur
 
Connecté Programpriv # Posté le 11/02/2012 à 13:40:18
C'est beau C++ !
Avatar

Avis : Très bon

Bonjour,
Ce chapitre est selon moi, incomplet. Peut être que je me trompe, mais le sujet des pointeurs, que ce soit dans des types classiques ou des objets, sont une affaire de mémoire. Je suis assez épaté de voir qu'on en parle pas dans ce chapitre, pourtant je pense que ce serait indispensable. En pratique, quand nous analysons certains cas de conception avec les pointeurs, il serait utile de parler un peu de la mémoire.
Sinon bon tutotage !

EDIT (suite à la réponse de Nanoc) : oui, mais il faut imaginer une chose, c'est que se passe t-il quand un objet est dans un autre objet, ou si il est pointé par celui-ci. Prenons l'exemple Objet A, Objet B et Objet C.
En premier A a déclaré B, donc B est "dans" A.
Ensuite A pointe sur C, donc C n'est pas "dans" A.
Maintenant, pour les curieux, et pour comprendre certaines implémentations très complexes que nous pouvons rencontrer, je pense qu'il serait intéressant de faire juste une précision à ce sujet, car les questions suivantes pourront se poser : "Est-ce que dans la mémoire A englobe B ?" (donc un plus gros nombres de "cases mémoires" occupés dans un seul espace) ou "Est-ce que B n'est pas dans A, mais "séparés" par une sorte de lien ?". Pour un débutant, ce n'est pas forcément évident de comprendre ça, et quand on arrive à des problèmes de conceptions et d'optimisations, il y a un manque. ^^

Sinon, pour le reste, c'est Nickel (un 17/20 facilement)
 
Hors ligne Nanoc # Posté le 11/02/2012 à 20:42:02
Aimez-vous le C++ ?
Avatar
Validateurs

Ville : Durham
Pays : Royaume-Uni
Études : EPFL

Tout cela est expliqué dans la partie I du tuto. Il n'y a rien de plus à ajouter à ce niveau.
 
Hors ligne maramu # Posté le 27/02/2012 à 21:57:14

Avis : Bon

Bonjour,

Je trouve que ce cours manque vraiment de l'exemple de la liste chaînée pour fournir un cas concret sur l'utilisation des pointeurs sur objets.

Code : C++
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Liste {
    public:
        ...
        Liste(const Liste& liste);
        ...
    private:
        int m_tete;
        Liste* m_suivant;

};


Code : C++
1
2
3
4
5
6
#include "Liste.h"

Liste::Liste(const Liste& liste)
{
 ...        
}


En espérant que vous ajoutiez cet exemple.

Je vous remercie pour toutes ces explications.

Bien cordialement,
Maramu
Pour accéder à cette section
Connectez-vous !
connexion_rpx