[C++] conversion typedef/struc->double
Résolu/Fermé
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
-
6 juin 2005 à 16:50
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 21 juin 2005 à 11:00
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 21 juin 2005 à 11:00
Bonjour.
Est-il possible de définir la conversion d'un type utilisateur vers un type natif comme double. par exemple, j'ai la structure suivante :
struct complex{double a,b;}
grasse aux constructeur, on peut faire : complex z=complex(a);
mais est -il possible de faire : double a=double(z); ?
Si vous savez si c'est possible ou pas. Et dans si c'est impossible, pourquoi?
Merci :-)
Est-il possible de définir la conversion d'un type utilisateur vers un type natif comme double. par exemple, j'ai la structure suivante :
struct complex{double a,b;}
grasse aux constructeur, on peut faire : complex z=complex(a);
mais est -il possible de faire : double a=double(z); ?
Si vous savez si c'est possible ou pas. Et dans si c'est impossible, pourquoi?
Merci :-)
A voir également:
- [C++] conversion typedef/struc->double
- Double ecran - Guide
- Whatsapp double sim - Guide
- Double appel - Guide
- Double authentification google - Guide
- Double boot - Guide
4 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
7 juin 2005 à 08:26
7 juin 2005 à 08:26
personne ??
question pas clair?
question pas clair?
Bonjour,
Pour commencer, je vois que t'as préferé utiliser struct ou lieu de class, ça me fait plus penser au C ! Cette façon de déclarer rend tous les membres publiques par défaut !! Ce qui viole un interet majeur de la programmation objet (C++) qui sont l'encapsulation et la protection de données.
Telle est déclarée la struct ne comporte aucun constructeur, ce qui rend ce que t'as ecrit un peu vague
la variable 'a' est un double ou bien un complex ??
Voici un bout de programme qui permet de faire ce que t'as écris,
Donc pour répondre à la question, pour pouvoir faire pareil avec un type natif alors il faudra accéder à ses constructeurs, en particulier le constructeur de clonage,
En ne connaissant pas la façon dont ces types ont été implémentés (est ce que ce sont des classes ? si oui, est ce qu'ils disposent de constructeurs ? si oui, lesquels et sont ils accessibles ?)
Une solution plus simple c'est de faire toi même une classe mon_type et que tu l'enrechis de tous les constructeurs que tu voudras !
La classe elle sera faite sur le même principe que la classe complexe (en plus simple)
Ciao
Pour commencer, je vois que t'as préferé utiliser struct ou lieu de class, ça me fait plus penser au C ! Cette façon de déclarer rend tous les membres publiques par défaut !! Ce qui viole un interet majeur de la programmation objet (C++) qui sont l'encapsulation et la protection de données.
Telle est déclarée la struct ne comporte aucun constructeur, ce qui rend ce que t'as ecrit un peu vague
complex z=complex(a);
la variable 'a' est un double ou bien un complex ??
Voici un bout de programme qui permet de faire ce que t'as écris,
#include <iostream> using namespace std; class complex{ private : double a, b; public : complex(){a=0; b=0;} complex(double x){a=x; b=0;} complex(double x, double y){a=x; b=y;} complex(const complex& c){a=c.a; b=c.b;} ~complex(){}; }; int main(){ double a=5.0; complex x, y, z; z = complex(); //utilisation du constructeur par défaut y = complex(a); //utilisation du constructeur à un parametre x = complex(z); //utilisation du constructeur de clonage ... return 0; }
Donc pour répondre à la question, pour pouvoir faire pareil avec un type natif alors il faudra accéder à ses constructeurs, en particulier le constructeur de clonage,
En ne connaissant pas la façon dont ces types ont été implémentés (est ce que ce sont des classes ? si oui, est ce qu'ils disposent de constructeurs ? si oui, lesquels et sont ils accessibles ?)
Une solution plus simple c'est de faire toi même une classe mon_type et que tu l'enrechis de tous les constructeurs que tu voudras !
La classe elle sera faite sur le même principe que la classe complexe (en plus simple)
Ciao
Reeter
Messages postés
120
Date d'inscription
mercredi 13 août 2003
Statut
Membre
Dernière intervention
6 décembre 2005
7 juin 2005 à 16:24
7 juin 2005 à 16:24
Ou alors il pourrait rajouter une fonction dans sa classe "Complex" qui rend un double:
double Complex::GetAsDouble() const {
// traitement de conversion de Complex à double, selon ce qu'il veut faire
}
après il pourrait l'appeler comme cela:
double d;
Complex c;
d=c.GetAsDouble();
double Complex::GetAsDouble() const {
// traitement de conversion de Complex à double, selon ce qu'il veut faire
}
après il pourrait l'appeler comme cela:
double d;
Complex c;
d=c.GetAsDouble();
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
7 juin 2005 à 16:59
7 juin 2005 à 16:59
Bonjour.
ok, merci.
En fait, je n'avais pas ecri les constructeur par feignantisse.
J'utilise struc, car je trouve ça plus interessant d'avoir directement acces aux variables (même si tout les bouquin disent qu'ils faut y acceder par des méthode).
Reeter, j'y ai bien penser à faire une fonction retournant un double, le problème c'est que ce n'est pas très modifiable.
L'idée, c'est que j'ai un prog de calcul qui utilise une class Matrice.
pour utilisé certaine fonctions tel que sin ou cos, etc... je suis obliger de repasser en type natif. Mais le type matrice peut être amener à évoluer, et j'aimerai faire ainsi:
typedef Type_gral matrice/complex/quaternion/autre_chose
Type_gral sin(Type_gral A){return double(A);}
Je ne pense pas que les types natifs soient des class. Mais comment le savoir? en plus, comment y rajouter un constructeur si il n'y a pas les sources.
ok, merci.
En fait, je n'avais pas ecri les constructeur par feignantisse.
J'utilise struc, car je trouve ça plus interessant d'avoir directement acces aux variables (même si tout les bouquin disent qu'ils faut y acceder par des méthode).
Reeter, j'y ai bien penser à faire une fonction retournant un double, le problème c'est que ce n'est pas très modifiable.
L'idée, c'est que j'ai un prog de calcul qui utilise une class Matrice.
pour utilisé certaine fonctions tel que sin ou cos, etc... je suis obliger de repasser en type natif. Mais le type matrice peut être amener à évoluer, et j'aimerai faire ainsi:
typedef Type_gral matrice/complex/quaternion/autre_chose
Type_gral sin(Type_gral A){return double(A);}
Je ne pense pas que les types natifs soient des class. Mais comment le savoir? en plus, comment y rajouter un constructeur si il n'y a pas les sources.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
21 juin 2005 à 11:00
21 juin 2005 à 11:00
J'ai trouveé la solution !
En fait, il faut faire :
En revanche ça me pose plein de problème après à cause des conversions implicite.
En fait, il faut faire :
operator Complex::double() const {//traitement return 'double);}
En revanche ça me pose plein de problème après à cause des conversions implicite.