Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
696 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Déclaration des classes selon la forme de Coplien

n°297748
gatorette
Posté le 31-01-2003 à 10:23:42  profilanswer
 

Reprise du message précédent :

Musaran a écrit :

Deux excellents arguments parfaitement vrais qui s'opposent, oh le joli débat que voilà.


 
En effet, les deux sont vrais. La subtilité vient du fait que j'ai précisé "si on est sûr que le comportement implicite est ce que l'on désire". Et c'est souvent là que le bât blesse.
En effet, j'imagine que des gens qui ne connaissent pas la déclaration du constructeur de recopie n'ont qu'une idée assez vague de son comportement implicite. Et évidemment, dès qu'ils ont une classe nécessitant une implémentation particulière, ils ne le font pas et ça provoque des bugs.
 
Par contre, j'utilise tous les jours sans m'en préoccuper plus que ça les conversions implicites de int en long (long mylong = 0;) et je ne me souviens pas avoir un jour eu un problème.
 
edit: couleurs, interversion de long et de int


Message édité par gatorette le 31-01-2003 à 10:26:53

---------------
each day I don't die is cheating
mood
Publicité
Posté le 31-01-2003 à 10:23:42  profilanswer
 

n°297754
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 31-01-2003 à 10:30:09  profilanswer
 

gatorette a écrit :


 
En effet, j'imagine que des gens qui ne connaissent pas la déclaration du constructeur de recopie n'ont qu'une idée assez vague de son comportement implicite. Et évidemment, dès qu'ils ont une classe nécessitant une implémentation particulière, ils ne le font pas et ça provoque des bugs.


Honnètement, je pense que le constructeur de recopie est le moins indispensable de tous les éléments de la forme de Coplien.
 
Dans quel cas a t'on besoin d'un constructeur de recopie ? Dans le cas ou on passe des objets par valeur. Et sincèrement, j'ai toujours réussi à éviter de passer des objets par valeur. Il y a mille et une manières d'éviter de passer des objets par valeur.


---------------
J'ai un string dans l'array (Paris Hilton)
n°297767
Kristoph
Posté le 31-01-2003 à 10:42:55  profilanswer
 

Et dans les cas ou tu construit un objet par recopie ? :D
 

Code :
  1. objet a;
  2. objet b = a;
  3. objet c(a);


 
Ca ne t'arrive jamais ça un de ces 2 cas ?

n°297972
BifaceMcLe​OD
The HighGlandeur
Posté le 31-01-2003 à 15:07:42  profilanswer
 

Musaran a écrit :


Parce que tu peut toujours avoir des raisons inattendues de faire des choses très tordues.
C++ ne t'empêchera pas de sauter dans le vide... ou de te tirer une balle dan le pied.
On pourrait juste souhaiter que le compilateur reconnaisse ces cas et émette une alerte.


Je crois profondément que les cas tordus sont les plus rares. La plupart du temps, les programmeurs ont besoin de faire des choses standard.
Il n'est évidemment pas question de rendre impossible le code tordu ; je me demande simplement pourquoi, dans un langage aussi courant, il est plus facile d'écrire des choses tordues que d'écrire des choses standard. Ce devrait être le contraire. Ainsi, le programmeur, naturellement, programmerait rigoureusement, et, quand il veut faire un truc tordu, il en a la possibilité -- mais ça lui coûte, par exemple en nombre de lignes de code ; d'une certain manière, le fait même qu'il s'est pris la peine d'écrire du code tordu alors même que c'était plus pénible pour lui, justifie la nécessité de ce code tordu. Et ainsi, le type qui relit le code derrière, il peut voir aussi tout de suite qu'il a affaire à du code délicat.

n°297980
BifaceMcLe​OD
The HighGlandeur
Posté le 31-01-2003 à 15:11:24  profilanswer
 

Autre exemple : il serait beaucoup plus sûr de faire en sorte que les objets soient naturellement passés par référence. Bien sûr, on peut toujours avoir besoin de passer des données par valeur, mais il faudrait un mécanisme explicite de passage par valeur (par exemple, certains Basic ont un mot-clé ByVal qui annonce clairement "passage par valeur" ). Et le compilateur, au passage pourrait imposer la présence d'un constructeur par recopie pour la classe en question (vérification qu'aujourd'hui, à ma connaissance, il ne fait pas, même s'il invoque ce constructeur dans le code qu'il génère).

n°298215
nraynaud
lol
Posté le 31-01-2003 à 19:33:46  profilanswer
 

BifaceMcLeOD a écrit :

Autre exemple : il serait beaucoup plus sûr de faire en sorte que les objets soient naturellement passés par référence. Bien sûr, on peut toujours avoir besoin de passer des données par valeur, mais il faudrait un mécanisme explicite de passage par valeur (par exemple, certains Basic ont un mot-clé ByVal qui annonce clairement "passage par valeur" ). Et le compilateur, au passage pourrait imposer la présence d'un constructeur par recopie pour la classe en question (vérification qu'aujourd'hui, à ma connaissance, il ne fait pas, même s'il invoque ce constructeur dans le code qu'il génère).


 
Va voir Eiffel, tu as la possibilité de déclarer certains champs de ta class 'expanded' et non par référence, comportement par défaut.
Mais c'est typiquement de truc où tu rentres dans une galère sans nom (comme en C++, des truc deviennent interdits etc.), par défaut le comportement est d'aggréger par référence.

n°298659
Musaran
Cerveaulté
Posté le 01-02-2003 à 06:13:25  profilanswer
 

Harkonnen a écrit :

Honnètement, je pense que le constructeur de recopie est le moins indispensable de tous les éléments de la forme de Coplien.

Pour moi, le moins indispensable est le constructeur par défaut.
Le C++ permetra tôt ou tard de spécifier les paramètres des éléments d'un new[].
 
Si les trois autres sont appelés "the big three", c'est parce qu'il est rarissime d'avoir besoin de l'un sans les deux autres.
 
 

BifaceMcLeOD a écrit a écrit :

Je crois profondément que les cas tordus sont les plus rares. La plupart du temps, les programmeurs ont besoin de faire des choses standard.


Presque par définition, dirais-je.
Le truc inhabituel peut être essentiel, crucial à un projet.
C'est pour ça qu'il doit rester possible, et c'est aussi l'avis de Bjarne Stroustrup.
 
 

Citation :

je me demande simplement pourquoi, dans un langage aussi courant, il est plus facile d'écrire des choses tordues que d'écrire des choses standard. Ce devrait être le contraire. Ainsi, le programmeur, naturellement, programmerait rigoureusement, et, quand il veut faire un truc tordu, il en a la possibilité -- mais ça lui coûte, par exemple en nombre de lignes de code

Tout à fait d'accord, et pas qu'un peu !
Mais 2 problèmes:

  • Il n'est pas toujours facile de déterminer ce qu'est 'la chose standard', et celle-ci peut changer avec la mode ou l'évolution des techniques.
  • Concrètement, comment on fait ?

2 idées:
1) Pouvoir spécifier (en tête de source) des options d'implicite, du genre "Option Explicit" de VB.

Code :
  1. option "int size"                      = 4    ;//int de 4 octets obligatoire
  2. option "integral promotion"            = true ;//int('a') est implicite
  3. option "integral to floating promotion"= false;//double(1) n'est pas implicte
  4. option "pointers équivalence"          = false;//il faut que tous les pointeurs aient la même représentation mémoire
  5. option "C++98"                         = false;//ce source n'est pas compatible avec cette norme


Inconvénients:
-Le sens du source est très différent suivant le contexte.
-À trop configurer, chacun créé son propre dialecte du langage.
 
2) Pouvoir nier ou la commander une spécification automatique.

Code :
  1. class C{
  2. C();
  3. const C& operator=(const C&);
  4. not C(C); //interdire la création automatique d'un ctor de recopie à partir du ctor par défaut+affectation
  5. ~C()= auto;//demander un dtor symmétrique du ctor
  6. };

Un tel système risque de tourner à l'usine à gaz, et je doute fort qu'il puisse être cohérent et évolutif.
 
 
Mince, ça aurait plus sa place dans [Topic unique] débats sur les langages


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Modifier la forme curseur....cherche un "analyseur de classes" pour JAVA
[Oracle] Déclaration de variable "Table of" ??Probleme de mise en forme d'un tableau
[UML] diagramme des classes[css] mise en forme de tableau
declaration de Liste d'objetprogramme visualisation des dependances des classes ?
déclaration variable, chaine de caractère[PHP] + [JS] Concaténé pour la déclaration d'une variable JS
Plus de sujets relatifs à : Déclaration des classes selon la forme de Coplien


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR