Rechercher : dans
Par :

[C++] conversion typedef/struc->double

Dernière réponse le 21 jun 2005 à 11:00:33 Char Snipeur, le 6 jun 2005 à 16:50:36 
 Signaler ce message aux modérateurs

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 :-) Salutation !
Char Snipeur

Meilleures réponses pour « [C++] conversion typedef/struc >double » dans :
Les templates en C++ VoirIntroduction Avantages Inconvénients Quand utiliser des templates ? Que dois-je mettre dans les .hpp et dans les .cpp ? Convention de notations Quelques templates célèbres STL BGL Premiers pas Spécifications de templates Template par...
Installer le plugin Flash dans Firefox (sous Windows) VoirInstaller Flash Player Télécharger Flash player Une fois le fichier téléchargé, fermez Firefox (c'est important) et double-cliquez sur le fichier téléchargé: Cliquez sur "Exécuter": Laissez l'installation se faire et cliquez sur "Fermer":
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...

1

Char Snipeur, le 7 jun 2005 à 08:26:20

Personne ??
question pas clair? Salutation !
Char Snipeur

Répondre à Char Snipeur

2

Mohamed, le 7 jun 2005 à 15:05:11

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

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

Répondre à Mohamed

3

Reeter, le 7 jun 2005 à 16:24:46

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();

Répondre à Reeter

4

Char Snipeur, le 7 jun 2005 à 16:59:45

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. Salutation !
Char Snipeur

Répondre à Char Snipeur

5

 Char Snipeur, le 21 jun 2005 à 11:00:33

J'ai trouveé la solution !
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. Salutation !
Char Snipeur

Répondre à Char Snipeur