Accueil > Forum > > > > Nested class access
Nested class access
dimanche 4 septembre 2011 à 00:01:30 |
Nested class access

mondrone
|
Bonsoir,
Je n'arrive pas à trouver comment je peux faire dans le cas suivant :
Imaginons :
Class A
{
Private :
Int *mavar;
Public :
Class iterateur_de_a
{
//Je voudrais pouvoir accéder a la variable mavar
}
}
Est-ce possible ?
j'ai essayé protected a la place de Private, mais ça ne semble pas changer grand chose.
Qui ne tente rien...
Ne risque pas d'avoir grand chose !!!
|
|
dimanche 4 septembre 2011 à 01:27:07 |
Re : Nested class access

CptPingu
|
Pourquoi as-tu besoin de ce mécanisme ? C'est étrange. Si tu veux créer un iterator et si mavar représente la position, cet attribut devrait plutôt être dans la classe iterateur_de_a, non ?
Je serais curieux de savoir à quoi tu vas appliquer cela.
Pour répondre techniquement à ta question:
Même si c'est une inner classe, une classe ne fait pas partie d'une autre. C'est juste la visibilité qui change, et rien d'autre. Donc il te faut un moyen d'interaction.
Par exemple:
Code C/C++ :
#include <iostream>
class Foo
{
public:
Foo()
: _mavar(0), _inner(*this)
{
}
class InnerFoo
{
public:
InnerFoo(Foo& foo)
: _foo(foo)
{
}
void func()
{
std::cout << _foo._mavar << std::endl;
}
private:
Foo& _foo;
};
void func()
{
_inner.func();
}
private:
int* _mavar;
InnerFoo _inner;
};
int main()
{
Foo foo;
return 0;
}
Tu noteras que tu pourrais très bien avoir 2 objets de type InnerClass.
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
dimanche 4 septembre 2011 à 10:02:22 |
Re : Nested class access

mondrone
|
Merci pour la réponse.
Je vais préciser d'avantage ce que je suis en train de faire.
Je code une class skip list.
Class skiplist
{
Private :
struct node
{
node **nexts;
string key;
void *value;//en fait c'est en te plate, mais je simplifie ici.
}
node *first;
public :
Class iterator
{
node * current;
}
}
Mon but est donc de pouvoir itérer la skip liste, mais je ne veut pas qu'il y ai un moyen pour que quelqu'un d'autre que skiplist ou iterator ai connaissance de node.
Qui ne tente rien...
Ne risque pas d'avoir grand chose !!!
|
|
dimanche 4 septembre 2011 à 10:54:34 |
Re : Nested class access

CptPingu
|
Si tu cherches à réaliser une liste chaînée, inutile de réinventer la roue.
Tu as: std::list pour une liste doublement chaînée, et std::forward_list pour une liste simplement chaînée.
En C++, il y a plusieurs réflexes à avoir. Lors que tu vois certaines choses dans un code, tu peux être sur que c'est louche. Ces signes sont:
- Utilisation d'un void* (Très très louche)
- Utilisation d'un ** (Très très louche)
- Utilisation d'un * (louche bien que possible)
- string au lieu de std::string (moyen, Évite les "using namespace", voir: [ Lien ])
De plus, par convention (totalement libre à toi de la suivre, ce n'est qu'une convention):
- Une classe commence par une majuscule (Pascal Case)
- Un attribut de classe est différencier des autres (par exemple en le précédent d'un '_').
- Méthode et variable sont en général en Camel Case.
- L'étoile ou la référence touche le type, et non la variable (contrairement au C).
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
dimanche 4 septembre 2011 à 12:20:18 |
Re : Nested class access

mondrone
|
En fait, il s'agit bien ici d'une skip list et non d'une liste chainée, c'est pour ça que j'ai besoins de mon node**, puisque la skip list contient finalement un nombre pour le moment inconnu de liens vers les suivantes.
Le void* value, ce n'est pas ce que j'ai mis dans le code, mais la je suis sur ma tablette et j'avoues que c'est relativement chiant de rédiger (correcteur auto et autres inconvénients), donc je n'ai pas mis les templates.
Mais, il est donc impossible que la classe interne ait accès a un membre de la classe de base, sans pour autant donner cet accès en openbar (public) ?
Qui ne tente rien...
Ne risque pas d'avoir grand chose !!!
|
|
dimanche 4 septembre 2011 à 12:25:19 |
Re : Nested class access

mondrone
|
J'oublie, autant préciser, j'ai regardé Std::map (une red black grée en fait), j'ai vérifié et certains recommandent plutôt la skip list.
Qui ne tente rien...
Ne risque pas d'avoir grand chose !!!
|
|
dimanche 4 septembre 2011 à 14:37:12 |
Re : Nested class access

CptPingu
|
node** => Juste pas possible en C++ (conceptuellement, pas techniquement). Il y a forcément un souci de conception quand tu vois ça. std::vector ou std::list à la place.
Prend aussi la bonne habitude de remplacer les pointeurs pas des références dès que c'est possible, ou par des smart pointers.
impossible que la classe interne ait accès a un membre de la classe de base,
Tu confonds classe et objet. Une classe n'est pas du code. C'est une moule qui décrit un objet. Tout comme une structure en C. Est-ce qu'en C tu te demanderais si une structure interne peut accéder aux champs de sa structure mère ? Non, car il n'y a pas de valeurs dans une structure, il n'y en a uniquement si tu crées une structure de ce type. Donc tu as bien accès à une variable, mais à condition d'en avoir une instance (un objet si tu préfères). Quand tu crées une classe interne, c'est comme si tu déclarait une classe normale, mais dont l'amitié serait automatique (mot clé "friend").
sans pour autant donner cet accès en openbar (public)
En quoi est-ce gênant ? Une classe interne à tout intérêt à avoir accès à sa classe mère, non ? Le fait que la classe interne voit sa classe mère publiquement, ne veux pas dire pour autant que toutes les classes verront celles-ci publiquement à leur tour.
J'oublie, autant préciser, j'ai regardé Std::map (une red black grée en fait), j'ai vérifié et certains recommandent plutôt la skip list.
Si tu te questionnes sur une std::map ou une skip list, alors c'est que tu as besoin d'accéder rapidement à un élément. Je ne suis dans ce cas pas vraiment convaincu par une skip list. Si tu recherches une collection à accès rapide, alors je te conseille plutôt une std::unordered_map (ou std::unordered_multimap selon les besoins). C'est une table de hash donc à accès O(1).
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
dimanche 4 septembre 2011 à 16:53:49 |
Re : Nested class access

mondrone
|
Utiliser un vector a la place du **... en effet c'est une solution, mais ça risque pas d'être lourd en comparaison ?
Sachant que le ** veut ici seulement dire qu'on ne connait la taille que a l'allocation, en dehors de ça elle est fixe !
Sinon, merci, c'est la notion de friend qui me manquait. Quand je disait public, c'était bien vis a vis de tout le monde !
Concernant la hash table, en effet pourquoi pas, mais la question était aussi présente pour l'apprentissage du fonctionnement des nested classes (ya pas un équivalent francais ?).
Merci pour tes réponses
Qui ne tente rien...
Ne risque pas d'avoir grand chose !!!
|
|
dimanche 4 septembre 2011 à 17:36:03 |
Re : Nested class access

CptPingu
|
Réponse acceptée !
mais ça risque pas d'être lourd en comparaison
Non, ça ne l'est pas. Un std::vector, ça reste un tableau (avec *) dont l'allocation est prise en charge en interne intelligemment.
De plus, dans un std::vector, tu peux reserver un espace fixe, si nécessaire.
Enfin, si vraiment la taille est complètement fixe, alors std::array pourrait être plus adapté.
nested classes (ya pas un équivalent francais ?)
Classes imbriquées ?
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
Cette discussion est classée dans : access, class, private, mavar, nested
Répondre à ce message
Sujets en rapport avec ce message
include dans header??? [ par Clonk ]
Bonjour,voilà, j'ai un problème dans un projet (sous Visual C++ 6.0)on va dire que j'ai 2 classes : A et Bdans les headers, j'ai besoin d'utiliser des
Ecriture/Lecture dans un fichier d'une class [ par Veovis ]
Salut,Ca fait pas mal de jour que j'essais de finir mon projet de fac, mais je galere grave sur un probleme.J'ai une class et je voudrais mettre toute
Access violation [ par thierry la fronde ]
Bonjour,J'ai créé une appli SDI [VC6]. Grace à un dialog bar et ses boutons, je peux afficher différentes FormView. Jusque là ça fonctionne. Plusieurs
comment se connecter à une base access ds 1 réseau [ par monimon18 ]
bonjour , je veut me connecter à une base de donnée Access dans un reseau local , je travail avec ODBC et Vc++, Merci
private.h et private.rc [ par Scientophage ]
J'ai un gros problème : à chaque compilation, mon compilateur (DEV Cpp 4.9.9.0) me crée deux fichiers : *private.h et *private.rc Cela a pour effet de
Pb de Multi héritage [ par bach58 ]
Je veux définir une classe Z qui hérite d'une autre classe A par deux voies différentes :class A{ int a; ....}class X:A ..{..}class Y:A... {...}
Class AVI [ par samuelbrie ]
Je recherche une classe avi pour décortiquer l'entete et les frames. Merci
Poblème d'analyse avec les class [ par theidiot ]
Je me demende commend je doit utilisé le plus efficacement mes classpar exemple: Si je crée un jeu ,et que, dans mon arborescence je dois écrire tous
crée un mot de passe à une base Access [ par monimon18 ]
bonjour, j'ai une base de donnée Access je veut créer un mot de passe à cette base par code, merci :-)en C++ si c possible
créer une table nomé image en Access par SQL [ par monimon18 ]
bonjour je veut créér une table nomé image en code SQL en ACCESS mais je ne sais pas pourquoi ça marche pas; create table image(champ1 int,champ2 int)
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|