Template c++ de nombres complexes

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 / Exemple :


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

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.