begin process at 2010 02 10 17:02:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > TEMPLATE C++ DE NOMBRES COMPLEXES

TEMPLATE C++ DE NOMBRES COMPLEXES


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Classé sous :template, patron, complex, complexe Niveau :Initié Date de création :26/02/2007 Date de mise à jour :26/02/2007 19:21:20 Vu / téléchargé :3 802 / 206

Auteur : emiaille

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Bon ben voilà, je voulais faire une classe pour gérer les complexes et m'initier aux templates C++ alors j'ai fait cette petite classe qui allient les deux.

Cette classe surcharge les différents opérateurs, le transtypage (enfin je crois) et d'autres fonctions comme le module (absolute), le conjugué (conjugue) et la puissance (power).

Je sais que les classes pour gérer les complexes sont légions sur ce site et sur d'autres, mais ce qui m'intéresse le plus ici ce sont les templates.

C'est mon première essai avec les templates, alors d'un, soyez indulgents, et de deux, si vous avez des remarques constructives ou des conseils avisés, je suis preneur.

Pour ce qui est des complexes, j'ai terminé mes études il y a un petit moment maintenant, alors je suis pas tout à fait sûr des calculs (j'ai rajouté les développements en commentaires). Si quelqu'un à le courage de vérifier, merci.

Si vous avez des idées de traitements à rajouter, je suis également preneur à la condition que vous me fournissiez les algorithmes.

Le source en présentation ci-dessous correspond à la déclaration de la classe. Dans le zip, il y a la source complète et un fichier de test. J'ai réalisé les tests sous Windows avec MinGW 5.1.3

Source

  • template <typename T>
  • class complex
  • {
  • public:
  • // Constructor / destructor
  • complex(void);
  • complex(const complex<T> & cmp);
  • template <typename U>
  • complex(complex<U> & cmp);
  • complex(const T & re, const T & im);
  • ~complex(void);
  • // Accessors / mutators
  • T & re(void);
  • T & im(void);
  • // Operator overloading
  • complex<T> & operator = (const complex<T> & cmp);
  • complex<T> operator + (const complex<T> & cmp) const;
  • complex<T> operator - (const complex<T> & cmp) const;
  • complex<T> operator * (const complex<T> & cmp) const;
  • complex<T> operator / (const complex<T> & cmp) const;
  • complex<T> & operator += (const complex<T> & cmp);
  • complex<T> & operator -= (const complex<T> & cmp);
  • complex<T> & operator *= (const complex<T> & cmp);
  • complex<T> & operator /= (const complex<T> & cmp);
  • bool operator == (const complex<T> & cmp);
  • bool operator != (const complex<T> & cmp);
  • complex<T> & operator = (const T & value);
  • complex<T> operator + (const T & value) const;
  • complex<T> operator - (const T & value) const;
  • complex<T> operator * (const T & value) const;
  • complex<T> operator / (const T & value) const;
  • complex<T> & operator += (const T & value);
  • complex<T> & operator -= (const T & value);
  • complex<T> & operator *= (const T & value);
  • complex<T> & operator /= (const T & value);
  • // Others operations
  • T absolute(void) const;
  • complex<T> conjugue(void) const;
  • complex<T> power(unsigned short n) const;
  • protected:
  • T m_re;
  • T m_im;
  • };
template <typename T>
class complex
{
  public:

    // Constructor / destructor

    complex(void);
    complex(const complex<T> & cmp); 
    template <typename U>	
    complex(complex<U> & cmp);
    complex(const T & re, const T & im);
    ~complex(void);

    // Accessors / mutators

    T & re(void);
    T & im(void);

    // Operator overloading

    complex<T> & operator = (const complex<T> & cmp);
    complex<T> operator + (const complex<T> & cmp) const;
    complex<T> operator - (const complex<T> & cmp) const;
    complex<T> operator * (const complex<T> & cmp) const;
    complex<T> operator / (const complex<T> & cmp) const;
    complex<T> & operator += (const complex<T> & cmp);
    complex<T> & operator -= (const complex<T> & cmp);
    complex<T> & operator *= (const complex<T> & cmp);
    complex<T> & operator /= (const complex<T> & cmp);

    bool operator == (const complex<T> & cmp);
    bool operator != (const complex<T> & cmp);

    complex<T> & operator = (const T & value);
    complex<T> operator + (const T & value) const;
    complex<T> operator - (const T & value) const;
    complex<T> operator * (const T & value) const;
    complex<T> operator / (const T & value) const;
    complex<T> & operator += (const T & value);
    complex<T> & operator -= (const T & value);
    complex<T> & operator *= (const T & value);
    complex<T> & operator /= (const T & value);

    // Others operations

    T absolute(void) const;
    complex<T> conjugue(void) const;
    complex<T> power(unsigned short n) const;
				
  protected:
			
    T m_re;
    T m_im; 
};

 Conclusion

Cette source est régie par la licence CeCILL-C soumise au droit français et respectant les principes de diffusion des logiciels libres. Vous pouvez utiliser, modifier et/ou redistribuer cette source sous les conditions de la licence CeCILL-C] telle que diffusée par le CEA, le CNRS et l'INRIA sur le site "http://www.cecill.info".

1.0.0 : Création

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   complex

Télécharger le zip


 Historique

26 février 2007 19:21:20 :
Remise en forme de la source affichée sur le site et ajout de l'intitulé de la licence.

 Sources de la même categorie

Source avec Zip OPERATION SUR LES MATRICES CARREES AVEC CLASSE GENERIQUE par chouhad
Source avec une capture OPÉRATIONS SUR MATRICES C++ par Minilogus
[DEV-C++] CALCUL DE LA RACINE CARRÉE D'UN RÉEL par Jhep
PROGRAMME QUI CALCUL LE PPCM ET LE PGCD par AnoSantino
EVALUER UNE EXPRESSION MATHÉMATIQUE par begueradj

 Sources en rapport avec celle ci

SMART POINTEUR À COMPTEUR DE RÉFÉRENCE par nirgal76
POINTEUR INTELLIGENT par snpier wolf
Source avec une capture CE PROGRAMME PERMET DE RESOUDRE LES EQUATIONS DE SECOND DEGR... par djmouh
Source avec Zip CLASS SIMPLE POUR LIRE DES FICHIER *.INI par lglandeur
Source avec Zip Source avec une capture CLASSES POUR TRAITER DES MATRICES DE COMPLEXES. par Gastonm

Commentaires et avis

Commentaire de sirdrako le 09/03/2007 21:31:59

En général, on met les opérateurs en friend.

bonne continuation !

Commentaire de emiaille le 09/03/2007 23:00:27

Merci.
J'aimerais savoir à quoi ça sert de les mettre en friend?

Commentaire de ketchupy45 le 10/03/2007 20:51:08

Bonjour, mettre en friend permet uniquement d'avoir accès aux données membres de la classe, alors que la fonction n'est pas utilisée avec un opérande de type Classe.
D'apres certains, les fonction en friend sont à éviter le plus possible. Il est conseillé d'utiliser une fonction d'accès aux données membres.
Voila j'espère avoir été clair.

Commentaire de emiaille le 10/03/2007 21:11:29

Merci j'avais déjà utilisé les fonctions friend dans d'autres développements que j'avais fait.
C'est vrai que j'évite de les utiliser mais ça peut être très pratique dans certains cas.

Ce que je ne vois toujours pas c'est quel en est l'intérêt de les utiliser sur les opérateurs dans mon cas.

Mes opérateurs sont en accès publique.
Est-ce que je devrais les mettre en accès protégé et faire un friend de ma propre classe sur elle-même? J'ai du mal à en comprendre l'utilité.

Commentaire de ketchupy45 le 10/03/2007 23:34:26

Désolé j'avait pas vu.
Euh non les opérateurs doivent etre public, par contre et c'est un des grands principes de la programmation orientée objet, les données membres (Re et Im) DOIVENT etre privée. Evidemment ça marche si elles sont publiques, mais n'importe qui y à accès de n'importe où ce qui peut etre catastrophique sur le résultat final. Parce que dans ta classe tout marche parce que tu sais exactement ce que tu as fait.
De plus ta classe étant une template elle est faite pour être réutilisée.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

classe template [ par mimosa803 ] bonsoir à tous , bon j'ai fait une fait une classe file générique (avec une classe noeud générique).Je veux tester cette classe en faisant file&lt;com file [ par mimosa803 ] bonsoir à tous , bon j'ai fait une fait une classe file générique (avec une classe noeud générique).Je veux tester cette classe en f Problème d'opérateurs sur des classes filles [ par pcmanprogrammeur ] Bonjour,Je vous expose mes classes :- class Complexe- class Cartesien:public Complexe- class Polaire:public ComplexeComme vous pouvez le constater, j' template [ par amine390 ] salutje suis un debutant et je sais pas ou l'erreur sur ma class complexevoila la class complexe.h et .cpp#ifndef complexe_h#define complexe_htemplate template et l'héritage [ par imad_lol ] salut.dans mon programme je déclare 2 classe X et Y.les 2 classe sont des classes templates et Y hérite de X :template &lt;class typ&gt;class X{ };//* Template C++ [ par luhtor ] Je suis confronté à un petit problème. Quelqu'un saurait-il pourquoi le code suivant ne compile pas ? (j'utilise VC express, mais c'est pas important) Classe contenant vecteur template [ par val3113 ] Bonjour,Je suis sur un programme cpp sous linux. J'ai créé une classe template "Vecteur" qui est censée pouvoir recevoir plusieurs types dont des clas Spécialisation template et fonctions inline [ par Samaths ] Bonjour à tous!Je suis nouveau sur le forum, mais je programme en C++ depuis quelques temps déjà (3 ans). Dans le cadre d'un projet (niveau universita Heritage Templates [ par ricklekebekoi ] Bonjour,Premiere utilisation des templates, et je frappe un mur .... dites moi ce que j'ai pas compris :En gros j'ai une classe générique symbole&lt;T pb DLL et template [ par axiagame ] Bonjour, je suis en train de tenter de créer une DLL, mais malheureusement je suis heurté à un problème : Je souhaite créer une fonction en template q


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,600 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales