[C++] conversion typedef/struc->double
Résolu
Char Snipeur
Messages postés
9813
Date d'inscription
Statut
Contributeur
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
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 driver - Télécharger - Pilotes & Matériel
- Double appel - Guide
- Double boot - Guide
4 réponses
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
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.