Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Codons mais vite :)

22 réponses
Avatar
YaNn
Salut,

qui peut me dire si il y a une différence de vitesse entre les accés au
membres (publiques ou privés) d'une classe et ceux d'une struct ?

Stroustrup dans sa "bible" nous dit bien qu'une struct est une classe
allégée, un structure de données plus qu'un type mais ne parle pas de la
façon dont c'est compilé.

Je pose cette question car je fais en ce moment un simulateur de
vêtement et j'aimerai savoir si pour les points de mon maillage je dois
faire une classe noeud ou simplement déclarer une struct noeud, sachant
que tous les membres sont publiques, ce qui correspond à la définition
de bjarne dans le choix entre les deux :).

En gros, cela correspond à savoir si les structs sont vraiments gerées
comme des classes ou pas.

merci :)

10 réponses

1 2 3
Avatar
YaNn
Fonzy wrote:
"YaNn" a écrit dans le message de
news:br7rfc$vqt$
(snip)


Voila à quoi je pensais, mais peut être avec des classes est-ce plus
concept tout-objet ? j'avoue ne pas être un fan du tout-objet mais s'il
faut en passer par la :)




Visiblement, c'est de la méthode elt. finis. Pour ce genre de code de calcul
(qui va se ramener au final à l'inversion d'une grosse matrice, donc qqch de
fondamentalement orienté procédure), effectivement l'encapsulation est
souvent le seul concept "objet" dont on se sert. En gros, si quelqu'un doit
prendre la relève du code derrière toi et l'étendre en spécialisant certains
concepts de base rentrant en jeu dans la mef (mais je vois pas trop
lesquels), ça vaut le coup. Sinon, il vaut mieux faire comme tu le sens
toi...
D'un autre côté, je me dis que faire de la mécanique des vêtements doit être
assez différent de la méca du solide classique. Il doit y avoir une
implémentation particulière que l'on attend de toi. Sinon, pourquoi ne pas
utiliser un code mef standard...

Tiens par exemple, est-il envisageable de prendre en compte, en plus du
chargement mécanique, un chargement thermique, un mouillage des fibres (et
modification des paramètres physiques)? Et si oui, ne peut-ce pas se faire
par une spécialisation de mes concepts de base? Ma boîte est-elle adepte du
knowledge management :))? Voilà le genre de question qu'il faut que tu te
poses pour savoir si oui ou non tu dois faire de l'objet.
Mais c'est vrai que si tu t'en tiens à ton cahier des charges, pour un code
de calcul mécanique qui tient lieu de petit projet (donc pas une suite
logicielle interfaçable avec tout plein de trucs), c'est souvent surfait.

Fonzy

Le truc de fou :)


juste un détail pour moi, qu'est ce que tu entends par code mef ?

Sinon ce n'est qu'un projet personnel pour me permettre d'utiliser C++,
ce qui se fait de plus en plus rare dans les facs et écoles de ma région
(PACA).


Avatar
Thomas Parle
"YaNn" a écrit dans le message de news:
br85qr$c87$
Fonzy wrote:

Sinon ce n'est qu'un projet personnel pour me permettre d'utiliser C++,
ce qui se fait de plus en plus rare dans les facs et écoles de ma région
(PACA).


C'est quoi ton école, sans indiscrétion ?

Avatar
Alain Naigeon
"Thomas Parle" a écrit dans le message news:
3fd7c123$0$1182$
"YaNn" a écrit dans le message de news:
br85qr$c87$
Fonzy wrote:

Sinon ce n'est qu'un projet personnel pour me permettre d'utiliser C++,
ce qui se fait de plus en plus rare dans les facs et écoles de ma région
(PACA).


C'est quoi ton école, sans indiscrétion ?


Question subsidiaire : ils enseignent avec quel autre langage ?

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France


Avatar
Fonzy
"YaNn" a écrit dans le message de
news:br85qr$c87$


Fonzy

Le truc de fou :)


juste un détail pour moi, qu'est ce que tu entends par code mef ?



méthode des éléments finis.

Sinon ce n'est qu'un projet personnel pour me permettre d'utiliser C++,
ce qui se fait de plus en plus rare dans les facs et écoles de ma région
(PACA).



Ils enseignent le java à la place ?

Fonzy


Avatar
Le Géant Vert
"YaNn" a écrit dans le message de news:
br85q9$c87$
Pierre Maurette wrote:

Oui, ou alors peut-être :
* Conserver vos données private.
* Ecrire les getter/setter pour les accès non critiques.
* Centraliser les traitements critiques (devant être rapides) dans une
classe
ou une fonction déclarée friend dans la classe de vos données.
Cordialemnt,
Pierre





Pourriez vous me detailler cette approche s'il vous plait, j'avoue etre
intrigué :)

merci d'avance



l'idée est la suivante : (progressivement, ex. de code)
dans un premier temps, on conserve les données private :

class MyClass
{
// forme canonique
public:
Myclass();
MyClass(const MyClass &);
const MyClass &operator =(const MyClass &);
~MyClass();

//données
private:
int m_data;
};

ensuite, on fourni l'interface de manipulation : on rajoute les
getters/setters :

public:
// getters/setters
inline int getData() const; OU inline int data() const;
inline void setData(int); OU inline int &data();

(ces deux formes sont les plus utilisées il me semble)

donc, tous objets extérieurs à MyClass utilisent les get/set pour accéder à
m_data
enfin, supposons qu'une class MyClassB doivent faire beaucoup d'accès ou de
manips sur MyClass, il peut etre interessant de la déclarer amie de cette
dernier : MyClassB pourra ainsi accéder à toutes les données de MyClass sans
se limiter à l'interface, ex : (selon les cas, on peut espérer un gain de
performance)

class MyClass
{
friend class MyClassB;

// forme canonique
public:
Myclass();
MyClass(const MyClass &);
const MyClass &operator =(const MyClass &);
~MyClass();

// getters/setters
inline int getData() const; OU inline int data() const;
inline void setData(int); OU inline int &data();

//données
private:
int m_data;
};

class MyClassB
{
public:
void operationSuperCompliquee(const MyClass &rMyClass)
{
....... peut utiliser tous les élements de rMyClass sans forcément
passer par l'interface getters/setters
}
};

voilà, voilà


Avatar
Pierre Maurette
"Le Géant Vert" a écrit dans le message de
news: br9vau$n8o$

"YaNn" a écrit
[...]


Pourriez vous me detailler cette approche s'il vous plait, j'avoue etre
intrigué :)
Désolé, j'aurais du répondre plus tôt, mais ma connexion RTC est


pratiquement inexploitable. Merci qui ? merci Free, l'opérateur au service
des consommataeurs "honnêtes" de très gros débits 24/24. Pour télécharger de
la doc, j'imagine ...

Je rajouterais au code du Géant Vert, que je ne recopie pas, intéressé que
je suis aujourd'hui par les problèmes de bande passante ;-) :
* Getters/Setters sont facultatifs. Mais il vaut mieux AMHA les mettre
systématiquement. De toutes façons, inline et non utilisés, ils ne prendront
pas beaucoup de place ;-)
* Il est possible de déclarer friend une fonction aussi bien qu'une classe.
Par exemple :
void operationSuperCompliquee(int NombreDeNoeuds, MyClass* TabloDeNoeuds)
A priori à placer dans le module de la classe MyClass.
Attention, une fonction membre statique de MyClass ne conviendrait pas.
Il y a d'autres solutions pour gérer les MyClass (liste chainée, itérateur),
mais il me semble que le simple tableau sera le plius rapide à traiter.
D'un autre coté, si vous utilisez effectivement une MyClassB (MyClassList,
par exemple), elle pourra gérer l'ensemble des MyClass sur tous les plans,
et donc maintenir le tableau, sans conséquence pour la vitesse.
Je vais allègrement vers mes 48 printemps, mais tableaux de noeuds et champs
de bits continuent à me réjouir ...
Cordialement,
Pierre


Avatar
YaNn
Fonzy wrote:
"YaNn" a écrit dans le message de
news:br85qr$c87$


Fonzy



Le truc de fou :)

juste un détail pour moi, qu'est ce que tu entends par code mef ?




méthode des éléments finis.


Sinon ce n'est qu'un projet personnel pour me permettre d'utiliser C++,
ce qui se fait de plus en plus rare dans les facs et écoles de ma région
(PACA).




Ils enseignent le java à la place ?

Fonzy



Exactement, j'ai eu 4 mois de cours C++ à la fac de Nice, contre 2 ans
de Java. Je veux bien reconnaitre le caractère pédagogique du Java mais
trop c'est trop :p Je suis actuelement en DESS et on nous fourgue du
Java et tous les gens que je connais dans d'autres sections sont soumis
au même régime.



Avatar
YaNn
Pierre Maurette wrote:
"Le Géant Vert" a écrit dans le message de
news: br9vau$n8o$

"YaNn" a écrit


[...]

Pourriez vous me detailler cette approche s'il vous plait, j'avoue etre
intrigué :)



Désolé, j'aurais du répondre plus tôt, mais ma connexion RTC est
pratiquement inexploitable. Merci qui ? merci Free, l'opérateur au service
des consommataeurs "honnêtes" de très gros débits 24/24. Pour télécharger de
la doc, j'imagine ...

Je rajouterais au code du Géant Vert, que je ne recopie pas, intéressé que
je suis aujourd'hui par les problèmes de bande passante ;-) :
* Getters/Setters sont facultatifs. Mais il vaut mieux AMHA les mettre
systématiquement. De toutes façons, inline et non utilisés, ils ne prendront
pas beaucoup de place ;-)
* Il est possible de déclarer friend une fonction aussi bien qu'une classe.
Par exemple :
void operationSuperCompliquee(int NombreDeNoeuds, MyClass* TabloDeNoeuds)
A priori à placer dans le module de la classe MyClass.
Attention, une fonction membre statique de MyClass ne conviendrait pas.
Il y a d'autres solutions pour gérer les MyClass (liste chainée, itérateur),
mais il me semble que le simple tableau sera le plius rapide à traiter.
D'un autre coté, si vous utilisez effectivement une MyClassB (MyClassList,
par exemple), elle pourra gérer l'ensemble des MyClass sur tous les plans,
et donc maintenir le tableau, sans conséquence pour la vitesse.
Je vais allègrement vers mes 48 printemps, mais tableaux de noeuds et champs
de bits continuent à me réjouir ...
Cordialement,
Pierre






Merci beaucoup, et puis y'a pas d'âge pour le code, c'est l'avantage sur
le sport :)



Avatar
adebaene
"Le Géant Vert" wrote in message news:<br9vau$n8o$...
"YaNn" a écrit dans le message de news:
br85q9$c87$
Pierre Maurette wrote:

Oui, ou alors peut-être :
* Conserver vos données private.
* Ecrire les getter/setter pour les accès non critiques.
* Centraliser les traitements critiques (devant être rapides) dans une
classe
ou une fonction déclarée friend dans la classe de vos données.
Cordialemnt,
Pierre





Pourriez vous me detailler cette approche s'il vous plait, j'avoue etre
intrigué :)

merci d'avance



l'idée est la suivante : (progressivement, ex. de code)
dans un premier temps, on conserve les données private :

class MyClass
{
// forme canonique
public:
Myclass();
MyClass(const MyClass &);
const MyClass &operator =(const MyClass &);
~MyClass();

//données
private:
int m_data;
};

ensuite, on fourni l'interface de manipulation : on rajoute les
getters/setters :

public:
// getters/setters
inline int getData() const; OU inline int data() const;
inline void setData(int); OU inline int &data();

(ces deux formes sont les plus utilisées il me semble)

donc, tous objets extérieurs à MyClass utilisent les get/set pour accéder à
m_data


Quel est l'intérêt de ces getters / setters si leur implémentation est
simplement (si je t'ai bien suivi)

int MyClass::getData() const
{
return m_data
}

void MyClass:setData(int data)
{
m_dataÚta;
}

Utiliser ces fonctions d'accès a un sens si tu fais un peu plus de
choses dedans que simplement positionner la variable. Si tu en
profites pour faire du log, de la vérification de valeur, ... alors là
ok, mais si c'est simplement positionner la variable, je ne vois pas
l'intérêt.

Arnaud



Avatar
Vincent Richard

Quel est l'intérêt de ces getters / setters si leur implémentation est
simplement (si je t'ai bien suivi)

int MyClass::getData() const
{
return m_data
}

void MyClass:setData(int data)
{
m_dataÚta;
}

Utiliser ces fonctions d'accès a un sens si tu fais un peu plus de choses
dedans que simplement positionner la variable. Si tu en profites pour
faire du log, de la vérification de valeur, ... alors là ok, mais si c'est
simplement positionner la variable, je ne vois pas l'intérêt.


Et si le nom de variable "m_data" change ? Et si son type change ? Et si la
valeur n'est plus stockée localement dans la classe mais obtenue par un
calcul ou un appel à une fonction, etc. ?

Dans le cas où tu as mis des getters/setters, le code client reste
compatible (aucune modification à faire).

Il doit sans doute y avoir d'autres cas d'utilisation.

Vincent

--
vmime, une bibliothèque C++ sous licence GPL pour parser et générer
des messages au format MIME : http://www.sourceforge.net/projects/vmime/

1 2 3