wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 2

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Accès binaire aux membres d'une classe, alignement & co...
Conversation (Résolue) : Accès binaire aux membres d'une classe, alignement & co...
13-12-2010 17:16:28  Accès binaire aux membres d'une classe, alignement & co... #1
hx (Membre)
Inscrit le : 21-09-2010
Messages: 35
Snippets: 0
Tutoriels: 0
Hors ligne
Salut,

J'ai une question de base que je ne m'étais jamais posé jusque là, voila :

Comment se comporte l'acces "binaire" aux membre d'une classe  ?

Par exemple si j'ai une classe :

Code Cpp:

class cVect {
public:
    float x;
    float y;
    float z;
 
    cVect();
    ~cVect();   
};
 


Que je déclare un objet vs ainsi :

Code Cpp:

cVect *vs=new cVect();



Et que j'appel une fonction void test(void *ptr); ainsi :

Code Cpp:

test( (void *)vs );



* Puis je considérer du coup la classe comme une simple "structure" binaire (un empilement des membres de type standard) pour accéder aux membres de la classe ?

Par exemple, puis je faire ceci (enfin est ce autorisé ?) :

Code Cpp:

void test(void *ptr){
    float *p=(float *)ptr;
    cout << p[0] << p[1] << p[2] << endl;
}


est ce que ((float *)ptr)[0] correspond bien a x ?

* Et dans le cas ou les membres sont private ou protected ? sont il toujours accessible ainsi ?

* Comment se comporte l'alignement dans ce cas ? (comme pour une structure ou union ?)

* N'y a t'il pas de données "binaire" supplémentaires pour la gestion de la classe par le compilateur ?


Bref vous aurez compris, j'ai besoin de réutiliser des tableaux de classes C++ dans des fonctions en C sans avoir a reformater la "strucutre binaire" de ses classes.
Si quelqu'un peut m'aider a y voir un peu plus claire...

Merci d'avance

Hx


----------------------------------------
Re,

Je reformule mon problème, par exemple :
- J'ai une classe vecteur qui me permet de me simplifier la vie. (elle comporte entre autre les coordonnées x,y,z, quelques flags et methodes utiles)
- J'ai donc des tableaux de vecteurs qui permettent de décrire des objets 3D.
- A un moment je dois donner OpenGL un tableau de float, comment faire :

* La première idée c'est de traiter tout le tableau de vecteur pour en constituer un nouveau, seulement pour l'occasion, correctement formaté de triplet "float". C'est facile mais ca alourdis le traitement et démultiplie les données.

* La seconde idée est de déclarer une structure vecteur directement (plutôt qu'une classe) et jouer avec l'alignement de opengl. Mais dans ce cas je perds le coté pratique et secure de l'utilisation sous forme de classe C++.

Je me dis qu'il doit y avoir plus élégant que m'obliger a travailler sur une structure C ou de remanier les données d'une classe C++.... ?

Quelqu'un a une idée ?

Hx

Dernière modification par hx (13-12-2010 18:05:29)

14-12-2010 18:25:26  Re: Accès binaire aux membres d'une classe, alignement & co... #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1375
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

Tu peux toujours faire le test, mais c'est très risqué.

Par principe, une classe est une structure pouvant contenir des méthodes, ainsi que des membres privés.
Si tu as besoin d'un accès "binaire", il vaut mieux te limiter à la structure.
Et dans le cas d'une classe, tu peut toujours avoir un accès binaire à ses membres publics.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
14-12-2010 22:46:19  Re: Accès binaire aux membres d'une classe, alignement & co... #3
hx (Membre)
Inscrit le : 21-09-2010
Messages: 35
Snippets: 0
Tutoriels: 0
Hors ligne
Salut,

Un grand merci pour ta réponse Xaviou, je confirme, c'est très risqué.
J'ai lu que sur certains compilateurs ésotériques (enfin avec certaines options activées) des octets de "service" étaient ajoutés en tête du chunk...

A++

Hx
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Accès binaire aux membres d'une classe, alignement & co...